#1086 1992 · IETF (Internet Engineering Task Force) · Networking standards
IETF 破解 OSI 与 TCP/IP 之争,靠的不是投票,而是数谁的代码在跑
问题
OSI 有政府和电信垄断企业撑腰,是「官方」标准;靠志愿者搭起来的网络协议看起来必输无疑
背景
1980 年代,正统的标准化世界都站在 OSI(开放系统互连)一边——这是由国际 ISO 流程产出的、规格完备的协议套件。它背后是欧洲电信垄断企业和大多数政府,各国法律要求采购 OSI 设备,而且它也是最理性的选择:完整、严谨、由委员会事先定好。互联网的 TCP/IP 是黑马——只由一群自治的志愿者社区定义,没有授权、没有投票资格、在任何一个官方机构里都没有席位。
按标准机构的规则正面较量,是赢不了的。OSI 有选票、有官方地位、有采购强制令;TCP/IP 几乎一样都没有。无论是比合法性、比代表性还是比官僚地位,任何委员会式的裁决都会在第一个实现落地之前,就把赛场判给 ISO。
换别人会怎么做
教科书式的回应是去正式会议桌上把对手比下去——在 ISO 里抢选票、争取政府强制令、游说那些依法必须采购 OSI 设备的买家。这些 OSI 阵营全都做得到,可互联网这边一样都用不上,因为它本来就没有代表、没有强制令、也没有官方席位。
他们看到了什么
互联网工程师看穿了:标准不是标准制定机构里赢下来的,而是在现场赢下来的——谁已经在跑,谁就赢。合法性追着能跑的代码走。与其去打一场赢不了的投票战,不如把合法性的标准从选票换成部署,于是问题从「谁是对的」变成了「谁已经在跑」。
那一手
互联网工程师没有在自己赢不了的正式阵地上去和 OSI 争,而是干脆拒绝投票。到 1992 年,IETF 已经把一条治理原则挑明了——David Clark 在那年的演讲里给它命名:「我们拒绝国王、总统和投票。我们相信粗略共识和正在运行的代码。」一个标准是否定案,不看是或否的投票,而看有没有足够多的人真的把它建出来并跑起来——仲裁者是现场跑着的代码,不是会议室里的代表人数。
为什么管用
粗略共识和运行代码之所以奏效,是因为它把裁决从挑战方赢不了的场子(官方委员会、采购强制令、投票)挪到它占优的场子(已经铺开在成千上万网络上的可用实现)。正式标准要到发布那天才算完成,所以它永远可以「还没做完」;运行代码哪一刻被证明能用,哪一刻就算完成,所以在对手还在定义规格时,它就已经靠被采纳而赢得认可。关键是这套机制会自我强化:每新增一次 TCP/IP 部署本身就是一个「投票」,标准因此只朝一个方向累积;而正式标准自身的复杂度(OSI 的完备性害了它——太多要完成、太少在跑)从优点变成了负担。
值了多少
OSI 败在太复杂、能跑的代码太少。TCP/IP 虽然松散,却已经在成千上万个互连网络上跑着,所以它靠被采纳而非靠任何投票,一路赢得认可。到 1990 年代中期,TCP/IP 成了占主导的互联网协议套件,而官方青睐的 OSI 悄悄输掉了这场战争。
什么时候会失灵
它会在「运行」无法被观察或比较的地方失效——安全关键或受监管的领域,法律要求先有定稿、可认证的标准才允许任何人部署(航空、医疗设备、金融),这时非正式的运行者依法不能当仲裁者。它还要求至少有一方真有能跑的代码:如果两边都只是纸面设计,或者两边都半坏,「运行代码」就裁不出任何结果。它也会牺牲正式流程本会交付的严谨性和互操作保证;这笔代价在开放的互联网上可以接受,可一旦坏实现漏进市场,就可能致命。
后来呢
粗略共识和运行代码赢下的不止一场战役——它成了互联网标准化的主导准则,从 IETF 带进 W3C,也带进了此后绝大多数开放协作流程。这套机制比最初证明它的那些具体协议活得更久。
资料来源
- [1]IEEE Annals of the History of Computing — 'Rough Consensus and Running Code' and the Internet-OSI Standards War (A.L. Russell)IEEE, 2006doi.org
- [2]Computer History Museum — Networking revolution: the protocol warsComputer History Museum, 2000computerhistory.org