Como se tornar um programador de Kernel / Systems / Device driver? [fechadas]

40

Atualmente, trabalho como engenheiro de software trabalhando com o sistema operacional Android. Trabalhamos para integrar nossa plataforma como um daemon nativo entre outras facetas do projeto. Trabalho principalmente em Java no desenvolvimento de aplicativos SDK e Android, mas posso ajudar com a plataforma em C / C ++.

De qualquer forma, tenho um grande interesse em trabalhar profissionalmente desenvolvendo um nível baixo para linux. Não estou infeliz na minha posição atual e vou ficar por aqui enquanto a empresa me permitir (na verdade, gosto muito de trabalhar lá!), Mas gostaria de trabalhar dessa maneira. Eu tenho trabalhado no Linux Kernel Development (Robert Love) e na Linux Programming Interface (Michael Kerrisk) (além de fortalecer minhas habilidades em C sempre que possível) e navegando casualmente nos sites Monster e similares.

O problema que vejo é que não há posições de nível de entrada. Como alguém entra nesse campo? Sempre que vejo "Linux Systems Programmer" ou "Linux Device Driver Programmer", todos eles exigem no mínimo 5 a 7 anos de experiência relevante. Eles querem alguém que conheça as cordas, não um programador de nível júnior (trabalho há 7 meses ...).

Então, suponho que alguns de vocês no stackoverflow trabalhem em uma capacidade profissional, fazendo exatamente o que eu gostaria de fazer. Como você chegou lá? Quais plataformas você usou para chegar até lá? Vou ter um momento mais difícil, porque tenho meus bacharéis em CSC em vez de um engenheiro de computação (onde eles experimentariam um pouco mais de integração, asm etc.)?

EDITAR PARA ESCLARECIMENTO! Estou ciente da natureza de código-fonte aberto do kernel / drivers linux, etc. Estou planejando contribuir independentemente de onde estiver meu trabalho diário. Estou mais curioso sobre que tipos de posições de nível de entrada me permitirão fazer um trabalho relevante e ser pago por isso! Obrigado por todas as respostas até agora!

acordeão
fonte
6
Muito simples. Linux é de código aberto. Basta seguir a lista de desenvolvimento, corrigir alguns bugs, depois que você sabe seu material, comece talvez escrevendo maior coisas como novos recursos, otimizações, talvez alguns motoristas ...
Let_Me_Be
2
Mas antes de escolher qualquer área no Linux, você deve ter um entendimento completo do funcionamento do Linux e algumas práticas. Vamos dizer que você deve ter conhecimento do sistema de arquivos Linux etc.
user29973

Respostas:

36

Escrevo drivers de dispositivo Linux para minha empresa e entrei nessa posição conhecendo o desenvolvimento do Linux em meu departamento e eles me promoveram / contrataram para uma nova função. Era muito uma entrada no estilo júnior, então eles existem e não perdem a esperança!

Meu conselho imediato para você é verificar se você pode restringir seu foco. A programação do kernel é muito diferente da programação do sistema é muito diferente da programação do driver de dispositivo.

  1. Os desenvolvedores de kernel se concentram em interfaces, estruturas de dados, algoritmos e otimização para o núcleo do sistema operacional.
  2. Programadores de sistema gravam daemons, utilitários e outras ferramentas para automatizar tarefas comuns ou difíceis.
  3. Os drivers de dispositivo usam as interfaces e estruturas de dados escritas pelos desenvolvedores do kernel para implementar o controle do dispositivo e a E / S.

Um programador de kernel muito bom talvez não saiba muito sobre latência de interrupção e determinismo de hardware, mas saberá muito sobre como funcionam os bloqueios, filas e Kobjects. Um programador de driver de dispositivo saberá como usar bloqueios, filas e outras interfaces do kernel para fazer com que o hardware funcione de maneira adequada e responsiva, mas ele não terá a mesma probabilidade de corrigir um bug de alocação de página ou escrever um novo agendador.

Portanto, escolha o que mais lhe interessa, talvez pesquisando listas de desenvolvimento ou rastreadores de erros, e veja que tipos de impacto você deseja causar. Em seguida, contribua e desenvolva experiência trabalhando nesses projetos e esforços. Quando seu nome / email é anexado ao código na linha principal do kernel, você terá experiência para apontar em seu currículo / carta de apresentação para outras posições :-)

Joe Friedrichsen
fonte
3
Interessante, mas talvez não seja uma bala mágica.
Matt Joiner
7
As balas mágicas raramente existem.
Ed S.
Obrigdo por sua contribuição! Vou trabalhar para restringir meu foco (eventualmente, gostaria de entender todas as facetas) por enquanto. Em que capacidade (se você tem o lazer de divulgar) você trabalhou antes de se tornar o "cara a cara" dos motoristas?
accordionfolder
4
Acredite ou não, mas eu era o suporte técnico para clientes que usam o hardware e as vendas tentando entender: respondi a e-mails e telefonemas. Mas minha experiência paralela no desenvolvimento de kernel e território de usuário para Linux me ajudou mais.
Joe Friedrichsen
3

Sou desenvolvedor de software com mais de 15 anos de experiência trabalhando na Motorola e em algumas outras empresas de alta tecnologia. Eu tenho um diploma de BSCE. Então, eu não sou amador.

Esta pergunta ... como entrar ... é comum não apenas no Linux, mas em praticamente qualquer área de especialização. A engenharia de software tornou-se como a medicina, na qual os profissionais devem se especializar. Mas quando sua empresa reduz o tamanho e demiti-lo após 10 anos sendo especialista, você descobre que o mercado de trabalho mudou e você não é atual. As empresas costumavam não ser tão seletivas - agora, atualmente, o único candidato que tem todas as habilidades na lista de desejos são aquelas que já trabalham para essa empresa ou para um concorrente direto! Tornou-se bastante difícil.

Estou nessa situação agora e, embora seja difícil, existem algumas estratégias que você pode usar para ser contratado. Mas primeiro, você DEVE se tornar proficiente na tecnologia, porque, se contratado, espera-se que produza. Depois de se sentir pronto, considere o seguinte:

  1. Procure uma pequena empresa para começar. Eles não podem ser tão exigentes quanto a quem contratam, assim como os grandes. Passe um ano ou dois lá e depois disso, você terá a experiência profissional no currículo para se qualificar.

  2. Considere contratar, especialmente se você não estiver trabalhando em período integral. As empresas estão muito mais dispostas a arriscar um contratado do que em período integral. Novamente, uma vez que você tenha experiência comprovável para colocar em seu currículo, ele abre portas.

  3. Faça um projeto pequeno ou dois por conta própria e crie um portfólio para apresentar aos possíveis empregadores. Isso pode abrir a porta para entrar não apenas em uma pequena empresa, mas também em uma empresa de médio porte.

Além do acima, considere usar um recrutador profissional de uma empresa como Kforce, Aerotek etc. O empregador paga a taxa de recrutamento e o recrutador ajudará a vendê-lo de uma maneira que você não pode fazer sozinho.

Na verdade, um "programador júnior" com apenas 7 meses de experiência tem uma enorme vantagem sobre um cara como eu ao tentar ser contratado para fazer algo novo. As empresas adoram "calouros" / "novos graduados" porque sabem que você não pedirá muito dinheiro e estarão dispostas a fazer o que pedir, incluindo longos períodos no exterior, se necessário. As empresas não vão me contratar para uma vaga júnior, mesmo que eu tenha me candidatado a uma porque sabem que vou procurar sair para uma melhor imediatamente. Sua situação não é tão ruim assim.

Boa sorte!

hóspede
fonte