En informática , el principio de robustez es una directriz de diseño para software que establece: "sé conservador en lo que haces, sé liberal en lo que aceptas de los demás". A menudo se reformula como: "sé conservador en lo que envías, sé liberal en lo que aceptas". El principio también se conoce como la ley de Postel , en honor a Jon Postel , quien utilizó la redacción en una especificación temprana de TCP . [1]
En otras palabras, los programas que envían mensajes a otras máquinas (o a otros programas en la misma máquina) deben cumplir completamente con las especificaciones, pero los programas que reciben mensajes deben aceptar entradas no conformes siempre que el significado sea claro.
Entre los programadores, para producir funciones compatibles , el principio también se conoce en la forma: ser contravariante en el tipo de entrada y covariante en el tipo de salida.
El RFC 1122 (1989) amplió el principio de Postel al recomendar que los programadores "supongan que la red está llena de entidades maliciosas que enviarán paquetes diseñados para tener el peor efecto posible". [2] Los protocolos deberían permitir la adición de nuevos códigos para campos existentes en futuras versiones de protocolos al aceptar mensajes con códigos desconocidos (posiblemente registrándolos). Los programadores deberían evitar enviar mensajes con "características de protocolo legales pero poco conocidas" que podrían exponer deficiencias en los receptores, y diseñar su código "no solo para sobrevivir a otros hosts que se comporten mal, sino también para cooperar para limitar la cantidad de interrupciones que dichos hosts pueden causar a la facilidad de comunicación compartida". [3]
En 2001, Marshall Rose describió varios problemas de implementación al aplicar el principio de Postel en el diseño de un nuevo protocolo de aplicación. [4] Por ejemplo, una implementación defectuosa que envía mensajes no conformes podría usarse solo con implementaciones que toleran esas desviaciones de la especificación hasta que, posiblemente varios años después, se conecta con una aplicación menos tolerante que rechaza sus mensajes. En una situación así, identificar el problema suele ser difícil y la implementación de una solución puede resultar costosa. Por lo tanto, Rose recomendó "verificaciones de consistencia explícitas en un protocolo... incluso si imponen una sobrecarga de implementación".
En 2018, un artículo sobre tecnologías de mejora de la privacidad de Florentin Rochet y Olivier Pereira mostró cómo explotar el principio de robustez de Postel dentro del protocolo de enrutamiento Tor para comprometer el anonimato de los servicios de cebolla y los clientes Tor. [5]
En 2023, Martin Thomson y David Schinazi argumentaron que el principio de robustez de Postel en realidad conduce a una falta de robustez, incluida la seguridad: [6]
Un fallo puede convertirse en un estándar de facto. Cualquier implementación del protocolo debe replicar el comportamiento aberrante, o no es interoperable. Esto es tanto una consecuencia de tolerar lo inesperado como un producto de una renuencia natural a evitar condiciones de error fatales. Asegurar la interoperabilidad en este entorno se suele decir que aspira a ser " compatible error por error ".