¿Qué quiso decir Linus Torvalds con su cita sobre la portabilidad? [cerrado]

41

En un debate con Andrew Tanenbaum sobre microkernel frente a la arquitectura del sistema operativo monolítico, Linus Torvalds dijo,

  

La portabilidad es para personas que no pueden escribir nuevos programas.

¿Qué quiso decir con eso?

    
pregunta ykombinator 11.10.2010 - 13:56

10 respuestas

82

Como Linus escribe en el debate, es irónico (es decir, no debe tomarse demasiado en serio).

Luego, continúa explicando que si bien la portabilidad es algo bueno, también es una compensación; El código no portátil puede ser mucho más simple. Es decir, en lugar de hacer que el código sea perfectamente portátil, simplemente hágalo simple y lo suficientemente portátil ("adherirse a una API portátil"), y luego, si necesita ser portado, vuelva a escribirlo según sea necesario. Hacer que el código sea perfectamente portátil también puede verse como una forma de optimización prematura, a menudo más perjudicial que bueno.

Por supuesto, eso no es posible si no puedes escribir nuevos programas y tienes que seguir con el original :)

    
respondido por el Joonas Pulakka 11.10.2010 - 14:12
12

Creo que significa que cada programa debe escribirse específicamente para el hardware y el sistema operativo en el que se ejecuta.

Creo que lo que está manejando es que el código de propósito general que puede ejecutarse en varias plataformas es menos eficiente o más propenso a errores que el código escrito específicamente para una plataforma. Sin embargo, significa que cuando desarrollas así debes mantener varias líneas de código diferentes.

    
respondido por el ChrisF 11.10.2010 - 14:10
9

Cuando se escribió Linux por primera vez, usaba funciones disponibles solo en la CPU i386, que era bastante nueva y costosa en ese momento.

  

Eso es exactamente lo que hace Linux:   solo usa un subconjunto más grande del 386   características que otros núcleos parecen   hacer. Por supuesto esto hace que el núcleo.   apropiado unportable, pero también hace   Para un diseño mucho más simple. Un   compromiso aceptable, y uno que   linux hecho posible en la primera   lugar.

A medida que avanzábamos en el siglo XXI, las características que hacían que el i386 fuera único se volvieron totalmente convencionales, permitiendo que Linux se volviera muy portátil.

    
respondido por el Andomar 11.10.2010 - 22:50
7

Como alguien que ha hecho un montón de Java y ha experimentado el fenómeno de "escribir una vez, depurar en todas partes" semanalmente durante años, puedo relacionarme completamente con esto.

Y Java es probablemente un ejemplo suave. Ni siquiera puedo empezar a imaginar lo que la gente atraviesa cuando intentan ser un código portátil en un idioma / conjunto de herramientas que ni siquiera fue diseñado para ser portátil en sí mismo.

Ahora mismo en el trabajo, estamos investigando la idea de escribir una versión liviana de uno de nuestros productos para dispositivos móviles. He investigado cómo hacer una versión portátil tanto para J2ME como para Android, que intenta compartir la mayor cantidad de código posible (obviamente, no puede ser completamente "portátil" per se, pero es una filosofía similar ). Es una pesadilla.

Entonces, sí, a veces realmente es bueno poder pensar (y hacer) en términos de usar las herramientas dadas para el trabajo dado. Es decir, desarrollo libre contra una sola plataforma monolítica / ambiente. Y simplemente escribiendo versiones separadas y limpias para cada uno.

    
respondido por el Bobby Tables 13.10.2010 - 20:51
5

Aunque algunas personas ven / tratan la portabilidad, siguiendo estándares, etc., como moralmente superior, o algo en ese orden, a lo que realmente se reduce es a la economía.

Escribir un código portátil tiene un costo en términos de esfuerzo para hacer que el código sea portátil, y (a menudo) renunciar a algunas funciones que no están disponibles en todos los objetivos.

El código no portátil tiene un costo en términos de esfuerzo para portar el código cuando / si te interesa una nueva arquitectura, y (a menudo) anular algunas características que no están (o no estaban) disponibles en el destino original .

El gran calificador es "cuándo / si te interesa una nueva arquitectura". Escribir código portátil requiere un esfuerzo por adelantado con la esperanza de una posible recompensa de poder usar ese código en arquitecturas nuevas / diferentes con poco o ningún esfuerzo. El código no portátil le permite retrasar esa inversión en la transferencia hasta que esté (al menos razonablemente) seguro de que realmente necesita un puerto para un objetivo en particular.

Si está seguro por adelantado de que va a llegar a muchos objetivos, generalmente vale la pena invertir por adelantado para minimizar los costos de transferencia a largo plazo. Si no está seguro de cuánto (o incluso si) necesitará portar el código, escribir un código no portátil le permite minimizar el costo inicial, retrasar o posiblemente incluso evitar completamente el costo de hacer que el código sea portátil.

Creo que también vale la pena señalar que he hablado de "portátil" y "no portátil" como si hubiera una división clara entre los dos. En realidad, eso no es cierto: la portabilidad es un proceso continuo, que se ejecuta desde completamente no portátil (por ejemplo, código de ensamblaje) a extremadamente portátil (por ejemplo, Info-zip), y en cualquier lugar intermedio.

    
respondido por el Jerry Coffin 04.11.2010 - 20:06
4

Tanenbaum señala que gran parte de Linux está escrito de manera no modular para aprovechar la CPU 386, el estado de la técnica en ese momento, en lugar de hacer que la interacción de la CPU sea un componente y, por lo tanto, muy fácilmente intercambiable. Tanenbaum cree esencialmente que el hecho de que el Kernel sea tan monolítico y esté vinculado a 386 CPU hace que sea muy difícil,

  • Port Linux en sí a otra plataforma de CPU (obviamente incorrecta, AMD64, PowerPC, etc.)
  • Programas de puerto escritos para linux x86 en otra arquitectura de CPU (también incorrecto)

El campamento de linux hace varios puntos, entre los cuales:

  • Linux ofrece un sistema de archivos multiproceso como parte del diseño
  • Microkernel, aunque interesante e intuitivo no es muy eficaz
  • La adherencia a la API portátil hace que el problema de la portabilidad sea más o un obstáculo en lugar de un bloqueador.
respondido por el Anatoly G 11.10.2010 - 23:38
3

Si desea escribir un código portátil, debe escribir un código portátil.

¿Qué quiero decir con eso?

El diseño debe reflejar el propósito. Si el idioma es C, por ejemplo, diseñarlo de modo que el número mínimo de líneas de código deba cambiarse para que funcione. A menudo, esto significaría separar la pantalla del cómputo, lo cual es una buena filosofía de diseño de todos modos (MVC). La mayoría del código C se puede compilar en cualquier lugar, siempre que tenga acceso a un buen compilador. Aprovecha eso y escribe todo lo que puedas para ser genérico.

Por cierto, esta respuesta solo se aplicará a las solicitudes. OS e incrustados son otro animal completamente.

    
respondido por el Michael K 04.11.2010 - 16:02
2

Interpreta esta declaración "literalmente" tal como es.

En otra de las citas de Linus, dijo: "C ++ está tratando de resolver todos los problemas incorrectos. Las cosas que C ++ resuelve son cosas triviales, extensiones casi puramente sintácticas de C en lugar de solucionar algún problema profundo y real. ".

También en su biografía, Linus "Just For Fun", mientras citaba sobre los micro-núcleos, dijo que para un problema con complejidad 'n' si se divide el problema en '1 / n' partes únicas ... entonces la complejidad total de desarrollar tales un sistema sería 'n!' esto en sí mismo es un factor suficiente para no intentar tal cosa, y extraer la eficiencia de un sistema tan complejo sería muy difícil.

    
respondido por el pankajdoharey 14.02.2011 - 06:56
2

Hay que tener en cuenta el hecho de que durante esos debates, Linux era muy nuevo y en gran medida era un sistema operativo solo 386. Creo que si le preguntaras a Linus hoy, él tendría una opinión diferente. Quizás no sea tan extremo como Tannenbaums, pero es probable que le dé un guiño a Hime y le diga que tenía razón en algunas cosas.

Linus y los otros desarrolladores del kernel pasaron por un gran esfuerzo para hacer que Linux fuera portátil, pero, de nuevo, es posible que Linux nunca haya existido si Linus hubiera tenido que hacerlo portátil para empezar.

    
respondido por el Erik Funkenbusch 14.02.2011 - 08:04
2

Significa que las personas que pueden escribir buenos programas no necesitan que las cosas sean portátiles, porque pueden trabajar desde cero.

Los programadores menos dotados quieren "importar" otros programas (portabilidad) al actual.

    
respondido por el Tom Au 09.11.2012 - 02:28

Lea otras preguntas en las etiquetas