Por que o Linux se adapta tão bem a diferentes plataformas de hardware?

22

Por que o Linux roda bem em tantos tipos diferentes de máquinas - desktops, laptops, servidores, dispositivos incorporados, telefones celulares, etc? É principalmente porque o sistema está aberto, então qualquer parte dele pode ser modificada para funcionar em diferentes ambientes? Ou existem outras propriedades do kernel e / ou sistema Linux que tornam mais fácil para este sistema operacional funcionar em uma ampla variedade de plataformas?

Justin Ethier
fonte
7
Acho que você já tem parte da resposta - a abertura facilita a adaptação de diferentes grupos de pessoas ou empresas às suas necessidades. Como o kernel foi notavelmente criticado por ser monolítico, não sei se o design inicial foi deliberadamente otimizado para escalabilidade de qualquer forma. Eu acho que um número maior de pessoas trabalhou no núcleo do Linux do que em outros sistemas operacionais - e talvez isso tenha forçado os mantenedores do núcleo a tomar cuidado ao dividir o código em partes com interfaces claras? Por outro lado, algumas variantes do BSD têm portabilidade como objetivo explícito.
RedGrittyBrick
@ Red: Foi criticado por ser um kernel monolítico em vez de um micro kernel - embora isso não tenha nada a ver com o design. Tem a ver com quanto do kernel é executado no espaço do usuário e quanto é executado no kernelspace. O kernel do Windows NT (por exemplo) é muito modular, mas ainda é tecnicamente monolítico, porque a maioria dos serviços (ou seja, o sistema de arquivos) é executada no modo kernel e não no modo usuário.
Billy ONeal
@ Billy: Windows NT é tecnicamente um kernel híbrido . Acredito que a Microsoft ainda mantém os subsistemas usando a passagem de mensagens e mantém a capacidade de mover partes para o espaço do usuário, conforme desejado. Eles fizeram isso com o sistema de gráficos no Vista: é agora no espaço do usuário depois de ter sido kernel-espaço desde NT 4.0
Zan Lynx
2
@Zan: Fiquei com a impressão de que o status de "núcleo híbrido" foi contestado . Por isso eu disse "monolítico". O NT certamente possui muitos recursos monolíticos, mesmo que sejam divididos em partes de estilo de biblioteca.
Billy ONeal
@ Billy: Parece-me que se o seu kernel pode ser transformado em um micro-kernel apenas alterando algumas opções e reconstruindo, então é algo diferente do monolítico, mesmo que as construções binárias mais usadas colocem tudo no espaço de endereço do kernel.
Zan Lynx

Respostas:

31

Embora a abertura seja certamente parte disso, acho que o principal fator é a insistência contínua de Linus Torvald de que todo o trabalho, de grande a pequeno, tenha um lugar no kernel Linux principal, desde que seja bem feito. Se ele tivesse decidido, em algum momento, traçar uma linha e dizer "ok, para esse sofisticado hardware de supercomputador, precisamos de uma bifurcação", então as variantes high-end e small-system completamente separadas podem ter se desenvolvido. Como é, as pessoas fizeram o trabalho mais difícil de fazer com que tudo acontecesse em conjunto relativamente bem.

E kludges que permitem um lado das coisas em detrimento do outro geralmente não são permitidos - novamente, forçando as pessoas a resolverem os problemas de uma maneira mais difícil, mas mais correta, o que geralmente é mais fácil de avançar. uma vez que seja necessário, o kludge se torna uma nota de rodapé histórica.

De uma entrevista há vários anos :

P: O Linux é um sistema versátil. Ele fornece PC, servidores enormes, celulares e mais ou menos dez outros dispositivos. De sua posição privilegiada, qual setor será aquele em que o Linux expressará o maior potencial?

R: Eu acho que o verdadeiro poder do Linux é exatamente o fato de não se tratar de um nicho. Todo mundo começa a jogar junto, e pessoas diferentes e empresas diferentes têm motivações e crenças totalmente diferentes no que é importante para eles. Então, eu nem estou interessado em nenhum setor em particular.

mattdm
fonte
18
E o sistema pequeno e as enormes definições de sistema continuam mudando o tempo todo, por isso é bom evitar discussões. Os smartphones multicore agora podem se beneficiar de todo o trabalho de supercomputador feito anos atrás.
Zan Lynx
4

O Linux é escalável para muitos tipos diferentes de hardware, porque:

  • é muito configurável
  • a fonte está disponível gratuitamente e pode ser criada para qualquer CPU que tenha um compilador C disponível
  • processadores em dispositivos embarcados e telefones celulares têm pelo menos o mesmo nível ou mais energia em comparação com as 386 máquinas originais em que o desenvolvimento inicial do Linux foi realizado e continuam a ganhar energia
  • funciona muito bem com nada além de uma rede, alguma forma de disco ou dispositivo semelhante a disco e uma porta serial
LawrenceC
fonte
Bem, alguém precisaria escrever uma quantidade mínima de código de bootstrap e tempo de execução C para a plataforma de destino. Ah, e tem que suportar memória virtual. Mas por outro lado verdade :)
Billy ONeal
1
@ Billy Existem portas para os sistemas nommu: uClinux, uClinux / ARM e MontaVista Linux.
Tobu 28/02
@ Tobu: Hmm .. eu não entendo como isso pode ser. Toda a "Filosofia Unix" para múltiplos processos pressupõe que algo como forkseja possível e forknão possa ser feito razoavelmente eficientemente em um sistema de memória não virtual. Embora as portas indicadas provavelmente usem partes do kernel Linux e possam executar algum software Linux, na maioria das vezes parece que as APIs expostas por essas portas são diferentes dos kernels Linux típicos. (Exemplo: o mapeamento de memória - que, obviamente, requer a memória virtual)
Billy ONeal
linuxjournal.com/article/7814 : diz que o uCLinux não suporta fork (), mas como uma variante de bloqueio chamada vfork (), os aplicativos no uCLinux precisam ser reescritos para usar o vfork ou os threads.
LawrenceC
4

O kernel do Linux é bem dimensionado porque é isso que é. O núcleo do kernel é relativamente pequeno e faz o que precisa fazer. Os drivers de dispositivo são opcionais e podem ser deixados de fora do kernel para sistemas menores. Além dos requisitos mínimos do kernel, a maioria das funcionalidades é implementada como recursos opcionais.

Dê uma olhada no arquivo de configuração instalado ao lado da maioria dos kernels. Ele listará todos os recursos que foram ativados, bem como quais drivers são suportados.

Os drivers são suportados, incorporados no kernel ou como módulos carregáveis. Isso permite que um kernel seja configurado dinamicamente para o hardware em que está sendo executado. Essa é a abordagem usada por muitas distribuições.

Além de ter as ferramentas de compilação, modificar o kernel para um novo hardware é relativamente simples. Para um novo processador, apenas o código relacionado precisa ser implementado como modificações na funcionalidade existente. Novos dispositivos requerem apenas um novo driver com os ganchos relevantes. Novos sistemas de arquivos também são modificações relativamente triviais.

A base de código foi bem mantida para manter essa flexibilidade sem bifurcação externa. A compilação condicional conduz um kernel muito flexível que foi mantido o mínimo possível.

BillThor
fonte
1

Não tenho o conhecimento técnico detalhado para fazer o backup dessa resposta, mas minha experiência sugere que o Linux se adapta bem em comparação com outros sistemas operacionais que eu frequentemente uso (principalmente o Windows). Portanto, talvez a questão seja por que o Windows não se adapta tão bem quanto o Linux.

Se ainda for útil reafirmar a questão dessa maneira, sugiro que as forças do mercado motivem a Microsoft a adicionar recursos e funcionalidades voltados para o hardware mais recente e mais capaz, porque eles vendem mais cópias do sistema operacional principalmente quando os usuários finais compram novos sistemas. . Portanto, a qualquer momento, acho que a versão mais recente do Windows apresenta um desempenho ruim em hardware mais antigo e menos capaz.

Perdoe-me se isso simplificar demais sua pergunta.

Mox
fonte
Parece que você está falando do sistema operacional, enquanto o cara está falando sobre o kernel. Bem, a menos que você saiba ao certo se o kernel do Windows está inchado.
tshepang
@Tshepang: Para ser justo, as perguntas são feitas sobre o "kernel e / ou sistema Linux". O Windows 7 e o Windows Phone 7 compartilham um kernel? O pouco que eu li sugere que seus kernels podem ter menos código em comum que os kernels do Ubuntu Server e Android.
RedGrittyBrick
Obrigado, mas a questão era realmente sobre Linux e não qualquer outro sistema operacional. Existem muitos outros por aí: en.wikipedia.org/wiki/List_of_operating_systems
Justin Ethier
O kernel do NT é realmente muito eficiente, mas é o vasto número de camadas que o rodeiam que são
produzidas