A fines de la década de 1990, cuando estaba en la escuela de posgrado, el periódico
JH Saltzer; DP Reed; DD Clark: argumentos de extremo a extremo en el diseño del sistema . ACM Trans. Comput Syst. 2 (4): 277-288, 1984. DOI = 10.1145 / 357401.357402
era bastante necesario leer en todas las clases de sistemas operativos en todas las universidades, y todavía parece ser uno de los principios rectores principales que subyacen en el diseño de Internet. (Véase, por ejemplo: J Kempf, R Austein (eds), y el IAB, " The Rise of the Middle and the Future of End-to-End: Reflections on the Evolution of the Internet Architecture ", RFC 3724, marzo de 2004. )
El principio de principio a fin establece (Saltzer et al., 1984):
[Si] la función en cuestión se puede implementar completa y correctamente solo con el conocimiento y la ayuda de la aplicación que se encuentra en los puntos finales del sistema de comunicación, ..., siempre que esa función cuestionada como una característica del sistema de comunicación en sí no posible. [Aunque] a veces una versión incompleta de la función proporcionada por el sistema de comunicación puede ser útil como una mejora del rendimiento.
O más brevemente (del resumen):
El argumento de extremo a extremo sugiere que las funciones ubicadas en niveles bajos de un sistema pueden ser redundantes o de poco valor en comparación con el costo de proporcionarlas en ese nivel bajo.
Pero he tenido poco éxito aplicando el principio de principio a fin en mi propia experiencia (que es en la arquitectura de computadoras, no en la arquitectura de Internet). Dado que el principio se declara como un "poema" (es decir, en prosa en inglés con un montón de términos que no están matemáticamente definidos) es bastante fácil engañarse a sí mismo al pensar que "la función en cuestión solo se puede implementar completa y correctamente con el conocimiento y la ayuda de la aplicación ". Pero, ¿cuál es "la función en cuestión", y mucho menos "el conocimiento y la ayuda" de una aplicación?
Ejemplo: las redes en chip (a diferencia de Internet) no pueden soltar paquetes, pero tienen un almacenamiento en búfer bastante limitado, por lo que debe tener alguna forma de evitar o recuperarse del punto muerto. Por otro lado, la aplicación también necesita liberarse del punto muerto, ¿verdad? Por lo tanto, podría razonar que debería hacer que el caso común (sin punto muerto) sea rápido y alejar la evitación del punto muerto en la aplicación. Esto es, de hecho, lo que probamos en Alewife y Fugu (Mackenzie, et al., Explotación de la entrega en dos casos para mensajería rápida protegida , Int'l Symp High-Perf Comp Arch, (HPCA-4): 231-242, 1998. O la disertación de John Kubiatowicz.) "Funcionó" (al hacer que la interconexión interrumpa el procesador cuando se llenaron los búferes y que el sistema operativo aumente con el almacenamiento en búfer de software) pero no he visto a nadie en la academia o la industria (incluidos ninguno de nosotros que fuimos autores en ese Papel HPCA) corriendo tratando de replicar la idea. Así que, aparentemente, evitar el punto muerto en una red no es la misma "función en cuestión" que evitar el punto muerto a nivel de aplicación, o el principio de principio a fin es incorrecto.
¿Es posible convertir el principio de principio a fin de un "poema" en un teorema? O al menos, ¿puede expresarse en términos comprensibles para un arquitecto informático?