O que Linus Torvalds quis dizer com sua cotação sobre portabilidade? [fechadas]

41

Em debate com Andrew Tanenbaum sobre microkernel vs. arquitetura monolítica do sistema operacional, Linus Torvalds disse,

Portability is for people who cannot write new programs.

O que ele quis dizer com isso?

    
por ykombinator 11.10.2010 / 13:56
fonte

10 respostas

82

Como Linus escreve no debate, é com a língua na bochecha (ou seja, não deve ser levado muito a sério).

Em seguida, ele continua explicando que, embora a portabilidade seja boa, também é um trade-off; código não suportável pode ser muito mais simples. Ou seja, em vez de tornar o código perfeitamente portátil, basta torná-lo simples e portátil o suficiente ("aderir a uma API portátil") e, se precisar ser portado, reescrevê-lo conforme necessário. Tornar o código perfeitamente portátil também pode ser visto como uma forma de otimização prematura - geralmente mais mal do que bem.

Claro que isso não é possível se você não puder escrever novos programas e ficar com o original:)

    
por 11.10.2010 / 14:12
fonte
12

Acho que significa que cada programa deve ser escrito especificamente para o hardware e o sistema operacional em que é executado.

Acho que o que ele está dirigindo é que o código de propósito geral que pode ser executado em várias plataformas é menos eficiente ou mais propenso a erros do que o código escrito especificamente para e adaptado a uma plataforma. Isso significa, no entanto, que quando você se desenvolve assim, precisa manter várias linhas de código diferentes.

    
por 11.10.2010 / 14:10
fonte
9

Quando o Linux foi escrito pela primeira vez, ele usava recursos disponíveis apenas na CPU i386, que era relativamente nova e cara na época.

That is exactly what linux does: it just uses a bigger subset of the 386 features than other kernels seem to do. Of course this makes the kernel proper unportable, but it also makes for a /much/ simpler design. An acceptable trade-off, and one that made linux possible in the first place.

À medida que entramos no século 21, os recursos que tornaram o i386 exclusivo tornaram-se totalmente comuns, permitindo que o Linux se tornasse muito portátil.

    
por 11.10.2010 / 22:50
fonte
7

Como alguém que fez muito Java e experimentou o fenômeno "escrever uma vez, depurar em qualquer lugar" semanalmente durante anos, posso me relacionar totalmente com isso.

E Java é provavelmente um exemplo leve. Eu não posso nem começar a imaginar o que as pessoas passam tentando usar, enquanto uma base de código portátil em uma linguagem / kit de ferramentas que nem sequer foi projetada para ser portátil em si mesma.

Agora mesmo no trabalho, estamos investigando a ideia de escrever uma versão básica de um de nossos produtos para dispositivos móveis. Eu fiz algumas pesquisas sobre como fazer uma versão portátil dele para J2ME e Android - que tenta compartilhar o máximo possível da base de código (obviamente não pode ser totalmente "portátil" em si, mas é uma filosofia semelhante ). É um pesadelo.

Então, sim, às vezes é bom poder pensar (e fazer) em termos de usar as ferramentas fornecidas para o trabalho determinado. ou seja, desenvolver-se livremente contra uma plataforma / ambiente único e monolítico. E apenas escrevendo versões separadas e limpas para cada uma.

    
por 13.10.2010 / 20:51
fonte
5

Embora algumas pessoas vejam / tratem a portabilidade, seguindo padrões, etc., como moralmente superiores, ou algo nessa ordem, o que realmente se resume a economia é.

Escrever um código portátil tem um custo em termos de esforço para tornar o código portátil e (frequentemente) renunciar a alguns recursos que não estão disponíveis em todos os destinos.

O código não portátil tem um custo em termos de esforço para portar o código quando / se você se importa com uma nova arquitetura e (frequentemente) renuncia a alguns recursos que não estão (ou não estavam) disponíveis no destino original .

O grande qualificador existe "quando / se você se importa com uma nova arquitetura". Escrever código portátil requer esforço inicial na esperança de um eventual retorno de poder usar esse código em arquiteturas novas / diferentes com pouco ou nenhum esforço. O código não portátil permite atrasar esse investimento na portabilidade até que você esteja (pelo menos razoavelmente) certo de que realmente precisa ser portado para um alvo específico.

Se você tem certeza de que vai atingir muitas metas, geralmente vale a pena investir antecipadamente na minimização dos custos de portabilidade a longo prazo. Se você tem menos certeza sobre o quanto (ou mesmo se) você precisará portar o código, escrever código não portátil permite minimizar o custo inicial, atrasar ou possivelmente até mesmo evitar completamente o custo de tornar o código portátil.

Eu acho que também vale a pena notar que eu falei de "portátil" e "não portátil" como se houvesse uma divisão clara entre os dois. Na realidade, isso não é verdade - a portabilidade é um contínuo, passando de totalmente não portátil (por exemplo, código de montagem) a extremamente portátil (por exemplo, Info-zip) e em qualquer lugar entre os dois.

    
por 04.11.2010 / 20:06
fonte
4
Tanenbaum afirma que muito do Linux é escrito de uma maneira não-modular para alavancar a CPU 386, o estado da arte na época, em vez de fazer a interação da CPU ser um componente e, portanto, muito facilmente trocável. Tanenbaum acredita, essencialmente, que o fato de o Kernel ser tão monolítico e ligado a 386 CPUs torna muito difícil,

  • O próprio Port Linux para outra plataforma de CPU (Obviamente incorreto, AMD64, PowerPC, etc)
  • Port Programas escritos para linux x86 para outra arquitetura de CPU (também incorreta)

O acampamento linux faz vários pontos, entre os quais:

  • O Linux oferece sistema de arquivos multithreaded como parte do design
  • Microkernel, embora interessante e intuitivo, não tem muito desempenho
  • A aderência da API portátil faz com que o problema de portabilidade seja maior ou menor, em oposição a um bloqueador.
por 11.10.2010 / 23:38
fonte
3

Se você quer escrever um código portátil, você tem que escrever código portátil.

O que quero dizer com isso?

O design deve refletir o propósito. Se o idioma for C, por exemplo, projete-o de forma que o número mínimo de linhas de código precise mudar para que funcione. Isso normalmente significaria separar a exibição da computação, o que é uma boa filosofia de design (MVC). A maioria dos códigos em C pode ser compilada em qualquer lugar, desde que você tenha acesso a um bom compilador. Aproveite isso e escreva o máximo possível para ser genérico.

BTW, esta resposta será aplicada somente para aplicativos. OS e embedded são outro animal inteiramente.

    
por 04.11.2010 / 16:02
fonte
2

Interprete esta declaração "literalmente" do jeito que é.

Em outra das citações de Linus ele disse: "C ++ está tentando resolver todos os problemas errados. As coisas que C ++ resolve são coisas triviais, extensões puramente sintáticas para C em vez de consertar algum problema profundo real ".

Também em sua biografia, "Just For Fun" linus ao citar sobre microkernels disse que para um problema com a complexidade 'n' se você dividir o problema em partes únicas '1 / n' .. então a complexidade total de desenvolvimento de tais um sistema seria 'n!' isso em si é um fator suficiente para não tentar tal coisa, e extrair eficiência de um sistema tão complexo seria muito difícil.

    
por 14.02.2011 / 06:56
fonte
2

Você tem que levar em conta o fato de que, durante esses debates, o Linux era muito novo e era em grande parte apenas um sistema operacional 386. Eu acho que se você perguntasse a Linus hoje, ele teria uma opinião diferente. Talvez não tão extremo quanto Tannenbaums, mas ele provavelmente vai concordar e dizer que ele estava certo sobre algumas coisas.

Linus e os outros desenvolvedores do kernel sofreram muito para tornar o Linux portável, mas, novamente, o Linux pode nunca ter existido se o Linus tivesse que torná-lo portátil para começar.

    
por 14.02.2011 / 08:04
fonte
2

Isso significa que as pessoas que conseguem escrever bons programas não precisam que as coisas sejam portáteis, porque podem funcionar do zero.

São programadores menos dotados que querem "importar" outros programas (portabilidade) para o atual.

    
por 09.11.2012 / 02:28
fonte