# Principi de robustesa

El principi de robustesa (en anglès robustness principle) és una pauta de disseny per al programari informàtic que diu: "sigueu conservadors en el que feu, sigueu liberals en el que accepteu d'altres". Sovint es redacta com: "sigueu conservadors en el que envieu, sigueu liberals en el que accepteu". El principi també es coneix com a llei de Postel, després de Jon Postel, que va utilitzar la frase en una primera especificació de TCP. En altres paraules, el que explica aquesta pauta és que els programes que envien missatges a altres màquines (o a altres programes de la mateixa màquina) s’han d’ajustar completament a les especificacions, però els programes que reben missatges haurien d’acceptar entrades no conformes sempre que el significat sigui clar. Entre els programadors, per produir funcions compatibles, el principi també es coneix en la forma de ser contravariant en el tipus d'entrada i covariant en el tipus de sortida.

## Interpretació

El document d'especificacions i requeriments "RFC 1122 - Requirements for Internet Hosts - Communication Layers" de l'octubre de 1989, va ampliar el principi de Postel recomanant als programadors "assumir que la xarxa està plena d'entitats malèvoles que enviaran paquets dissenyats per tenir el pitjor efecte possible". Els protocols haurien de permetre afegir nous codis per als camps existents en futures versions de protocols, acceptant missatges amb codis desconeguts (possiblement registrant-los). Els programadors haurien d’evitar l'enviament de missatges amb "funcions de protocol legals però obscures" que puguin exposar deficiències en els receptors i dissenyar el seu codi "no només per sobreviure a altres hostes que es comportin malament, sinó també per cooperar per limitar la quantitat de pertorbacions que aquests hostes poden causar al contingut compartit facilitant la comunicació".

## Crítica

El 2001, Marshall Rose va caracteritzar diversos problemes de desplegament en aplicar el principi de Postel en el disseny d'un nou protocol d'aplicació. Per exemple, una implementació defectuosa que envia missatges no conformes només es pot utilitzar amb implementacions que tolerin aquestes desviacions de l'especificació fins que, possiblement, diversos anys després, es connecti amb una aplicació menys tolerant que rebutgi els seus missatges. En aquesta situació, identificar el problema sovint és difícil i desplegar una solució pot ser costós. Per tant, Rose va recomanar "comprovacions de consistència explícites en un protocol... fins i tot si imposen despeses generals d'implementació".
Des del 2015 fins al 2018, en una sèrie de Internet-Drafts, Martin Thomson argumentà que el principi de robustesa de Postel condueix en realitat a una "manca" de robustesa, inclosa la seguretat:
| « | (anglès) A flaw can become entrenched as a de facto standard. Any implementation of the protocol is required to replicate the aberrant behavior, or it is not interoperable. This is both a consequence of applying the robustness principle, and a product of a natural reluctance to avoid fatal error conditions. Ensuring interoperability in this environment is often referred to as aiming to be "bug for bug compatible. | (català) Un defecte pot arrelar-se com a norma de facto. Qualsevol implementació del protocol és necessària per replicar el comportament aberrant o no és interoperable. Això és tant una conseqüència de l'aplicació del principi de robustesa, com un producte d'una reticència natural a evitar condicions d'error mortals. Assegurar-se que la interoperabilitat en aquest entorn es denomina sovint l'objectiu de ser "compatible amb bugs". | » |
El 2018, un document sobre tecnologies que milloren la privadesa de Florentin Rochet i Olivier Pereira va mostrar com explotar el principi de robustesa de Postel dins del protocol d’encaminament Tor per comprometre l’anonimat dels serveis de ceba i dels clients Tor.

## Referències

* ↑ Postel, Jon, ed. (gener 1980), Transmission Control Protocol, IETF, RFC 761, doi:10.17487/RFC0761, <https://datatracker.ietf.org/doc/html/rfc761>. Consulta: 9 juny 2014
* ↑ Braden, Robert. «RFC 1122 - Requirements for Internet Hosts - Communication Layers». Internet Engineering Task Force. Network Working Group. [Consulta: 8 abril 2021].
* ↑ Braden, R., ed. (octubre 1989), Requirements for Internet Hosts: Communication Layers, IETF, RFC 1122, doi:10.17487/RFC1122, <https://datatracker.ietf.org/doc/html/rfc1122>. Consulta: 9 juny 2014
* ↑ Wilde, Erik. Wilde's WWW: Technical Foundations of the World Wide Web. Springer‑Verlag, 2012, p. 26. DOI 10.1007/978-3-642-95855-7. ISBN 978-3-642-95855-7.
* ↑ Rose, M. (novembre 2001), On the Design of Application Protocols, IETF, RFC 3117, doi:10.17487/RFC3117, <https://datatracker.ietf.org/doc/html/rfc3117>. Consulta: 9 juny 2014
* ↑ Thomson, Martin (maig 2019), The Harmful Consequences of the Robustness Principle, IETF, <https://tools.ietf.org/html/draft-iab-protocol-maintenance>. Consulta: 4 octubre 2019
* ↑ Rochet, Florentin; Pereira, Olivier «Dropping on the Edge: Flexibility and Traffic Confirmation in Onion Routing Protocols». Proceedings of the Privacy Enhancing Technologies Symposium. De Gruyter Open, 2, 2018, pàg. 27–46. ISSN: 2299-0984.

## Enllaços externs

* Història del principi de robustesa (Internet) (Nick Gall, maig de 2005)
* Protocol d’Internet Arxivat 2021-04-14 a Wayback Machine., pàgina 22; J. Postel, IEN 111, agost de 1979.