工程哲学:Radia Perlman

核心要点
- 她发明了生成树协议,让交换式以太网得以大规模运行。 在Digital Equipment Corporation任职期间,Radia Perlman设计了生成树算法——1985年发表,并被标准化为IEEE 802.1D——它让任意拓扑网络中的网桥能够自行计算出一条通往每个目的地的无环路径,同时悄然绕过故障完成自愈。没有它,冗余链路会形成环路,一个广播帧便会永远绕圈,直到把整个网络拖垮。123
- 她最根本的坚持是健壮性:网络在故障下——包括恶意故障下——依然保持正确。 她1988年的MIT博士论文题为《具有拜占庭健壮性的网络层协议》——这是一种不仅要在链路失效时继续工作、还要在节点主动撒谎时继续工作的路由设计。为故障情形而设计,包括对抗性情形,贯穿了她所构建的一切。1
- 她写下了那本经典教科书,还把一首诗写进了专利里。 Perlman是《Interconnections: Bridges, Routers, Switches, and Internetworking Protocols》的作者——整整一代网络工程师从这本书入门——并与人合著了《Network Security: Private Communication in a Public World》。她还写了《Algorhyme》——“I think that I shall never see / A graph more lovely than a tree”——用以描述生成树,这大概是有记录以来唯一一份包含诗歌的软件专利。347
- 她拥有100多项专利,入选了国家发明家名人堂——却不喜欢”互联网之母”这个称号。 入选互联网名人堂(2014年)和国家发明家名人堂(2016年),手握100多项已授权专利,Perlman数十年来一直在反驳”互联网之母”这一标签,坚持认为没有任何单独一个人发明了互联网。15
原理
“I think that I shall never see / A graph more lovely than a tree. / A tree whose crucial property / Is loop-free connectivity.”(我想我永远不会见到,一幅比树更可爱的图。树有一个关键的属性,那就是无环的连通性。)—— Radia Perlman,《Algorhyme》,描述生成树协议的诗4
大多数工程都在为”一切正常”的情形做优化。你设计顺利路径,处理几个能想象到的错误,然后发布。网络却不给你这份安逸。网络是一张由机器构成的活体网格——机器会随机失效,链路会在数据包传到一半时陷入黑暗,而且——如果运气不好——某些节点已被攻陷,正在向你灌输谎言。Perlman的全部工作所基于的假设,与大多数代码恰恰相反:故障情形不是边界情况,它就是设计的中心。 一个协议之所以称职,不在于线路干净时能工作,而在于线路不干净时仍保持正确——在无人介入的情况下自稳定地回到良好状态。13
生成树协议是这一原理最纯粹的体现。它要解决的问题既残酷又结构性:如果你用冗余链路把交换机连在一起——而为了可靠性,你必须这么做——就会制造出物理环路,而一个广播帧会沿环路永远绕行,在每个分支处倍增,直到占满每条链路、网络瘫痪。最朴素的修补办法是禁止环路,但那样一来你也就禁止了冗余,一根被剪断的网线就会让半栋楼断网。Perlman的洞见是:两者可以兼得——让操作人员随意接成任何网格,再让交换机自己计算出一棵单一的无环树,既能触达每个节点,又把冗余链路留作备用。23 没有中央控制器,没有人手工画树——这是一个完全分布式的算法,自行收敛,并在出问题时重新收敛。
这一原理还有下半部分,正是它让上半部分变得深刻:健壮性必须延伸到恶意,而不只是意外。 失效的节点只是停止;而被攻陷的节点会继续说话,且它说的话就是冲着伤害你而来的。Perlman的博士研究提出了更难的问题——即便部分路由器正在主动破坏,路由协议能否仍然正确地投递数据包?——并以具有拜占庭健壮性的协议作答。1 从生成树到她的安全工作,贯穿其中的是同一种纪律:对协议所处的世界做最坏的设想,并加以设计,使它无论如何都能自愈。而且自始至终,那份美学都是简洁。一个简洁的协议,是你能够推理、能够证明、能够信任其会收敛的协议——这也正是生成树能写进一首诗的原因。
背景
Radia Perlman于1951年12月18日出生在弗吉尼亚州朴次茅斯。1 她就读于MIT,取得了数学的SB与SM学位,并在之后于1988年获得计算机科学博士学位;她的论文题为《具有拜占庭健壮性的网络层协议》——一种能够在路由器转而恶意时仍可存活的路由设计。1 这个论文题目不是她职业生涯的一条脚注;它就是她职业生涯本身的中心论点,只是早早写了下来。
在让她声名远播的那些协议之前,她在MIT的人工智能实验室做了一件悄无声息却足够激进的事:20世纪70年代初,她开发了TORTIS——“Toddler’s Own Recursive Turtle Interpreter System”(幼儿专属递归海龟解释器系统)——一个简单到连三岁半的孩子都能给机器人编程的LOGO海龟环境版本。1 它与她后来工作之间的脉络是真实存在的。教一个幼儿编程是一项彻底简化的练习:把一个想法剥到只剩本质,使它在面对一个毫无先验知识的人时仍能成立。她的余生都在把网络协议剥向同样那种本质而可理解的内核。
她的职业道路穿过了那些构建现代网络的机构。MIT毕业后她在BBN工作,然后在1980年前后加入Digital Equipment Corporation,正是在DEC——不是在某个研究孤岛里,而是在解决一个真实的产品问题时——她发明了生成树算法,设计了DECnet路由,并在把路由从距离矢量推向链路状态方法(包括IS-IS)方面做了奠基性工作。13 离开DEC后她在Novell工作,之后是Sun Microsystems(在那里她是Sun Fellow,赢得了她40多项专利中的大部分),再后来是Intel和Dell EMC。1 一路走来,她积累了100多项已授权专利,入选互联网名人堂(2014年)和国家发明家名人堂(2016年),还有一个她多年来一直拒绝的标签——“互联网之母”——理由是没有任何单独一个人发明了互联网,而且这个带性别色彩的称号遮蔽的多于它所致敬的。15
工作
生成树协议:一棵由网络自己长出来的树
从这里开始,因为它是把原理化作机制的产物。场景是一个扩展LAN——许多网段由网桥(也就是我们如今所说的交换机)缝合在一起——以冗余链路布线,使任何单点故障都无法把网络割裂。冗余对可靠性而言不容商量。但冗余意味着环路,而环路是致命的:以太网帧不带生存时间字段,因此进入环路的广播帧会被无止境地复制绕行,又因为交换机会把广播向每个端口泛洪,副本不断倍增,直到耗尽所有可用带宽。网络不是变慢;它是死亡。这就是广播风暴,而”STP的基本功能是防止网桥环路以及由此产生的广播辐射”。2
Perlman 1985年的算法以一个无需中央权威的分布式计算解决了它。3 首先,网桥选举出一个根——标识符最小者胜出,通过交换小型消息决出,没有人去挑选。2 接着每个网桥计算出通往根的最低代价路径,只保留那一条链路用于转发,阻塞冗余链路。2 剩下的就是一棵生成树:从每个网段到根、因而也是任意两点之间的一条单一无环路径,它仍然触达每一个LAN——正是那首诗所命名的”无环连通性”。4 被阻塞的链路并未浪费;它们待命留存。当一条活动链路失效,网桥检测到这一变化,算法计算出一棵新的最低代价树,将一条备用链路提升起来以恢复连通。2 这就是自愈——自动、分布式,无需任何操作人员动一根手指。
它作为工程为何重要:生成树是一个操作人员可以无视的自稳定分布式算法。你插上网线,为安全加上冗余,网络就会自己理清——并在出问题时重新理清。IEEE于1990年把该算法标准化为802.1D,几十年里它运行在几乎每一台出厂的受管以太网交换机内部。2 它也是可理解性的典范:整件事能装进一首十二行的诗里,因为底下的想法是真正简单的,而简单正是让你能够信任它会收敛的东西。4
链路状态路由、IS-IS 与《Interconnections》
生成树治理一个扩展LAN之内的桥接;而网络之间的路由是更大的问题,Perlman也塑造了它。在DEC,她帮助把路由从距离矢量协议——每个路由器只知道由邻居所报告的到各目的地的代价,这种设计容易收敛缓慢并”计数到无穷”——推向链路状态路由,让每个路由器都获知完整拓扑并计算自己的最短路径。1 她在IS-IS(Intermediate System to Intermediate System)上的工作——这一链路状态协议成为OSI中与OSPF对应的产物——是链路状态路由之所以健壮且收敛迅速的部分原因;它被构建来可靠地泛洪拓扑变化并重新计算路径,这与生成树是同一种自愈本能,只是上升了一层。1
她还写下了那本书——字面意义上的。《Interconnections: Bridges, Routers, Switches, and Internetworking Protocols》是一代网络工程师赖以入门的教材,而《Network Security: Private Communication in a Public World》(与Charlie Kaufman和Mike Speciner合著)成了一部标准参考书。7 她的写作之所以与众不同,与她的协议之所以与众不同,是同一件事:她坚持解释一项设计为什么是这个样子,而不只是它做什么——教读者去推理正确性与故障,而非背诵规范。

针对恶意而设计:拜占庭健壮路由与会过期的数据
这是最能揭示她本人的工作。一个能绕过坏掉的节点自愈的网络已经够难了;而她的博士研究《具有拜占庭健壮性的网络层协议》,问的是路由能否在某些路由器已被攻陷、并竭尽全力扰乱它——丢弃数据包、谎报拓扑、伪造路由消息——的情况下,仍然正确地投递数据包。1 失效节点是沉默而可预测的;拜占庭节点则是喧闹而对抗的,而协议无论如何都得把包送达。把恶意故障当作一等的、需要去设计应对的情形——而不是事后再栓上的安全附加件——这领先于大多数系统的构建方式数十年,而且它直接源自与生成树相同的本能:设想世界充满敌意,无论如何都收敛到正确。1
这种本能延续进了她后来的安全工作。她为公钥基础设施的信任模型做出了贡献,还提出了一个颇具她风格的清晰想法——用于会过期的数据的机制:一种经过设计的临时密钥管理,使信息能够在选定时间之后被可靠地变得不可恢复,从而保证被删除的数据是真正消失了。1 这是把故障情形的心态转向了隐私。大多数系统被构建来记住;她问的是如何构建一个能被信任去遗忘的系统,而这是更难、也更对抗的问题。

TRILL 与简洁的纪律
Perlman也是她自己最尖锐的批评者,这正是她设计了生成树继任者的原因。STP最大的局限是它优点的另一面:为了消灭环路,它阻塞冗余链路,这意味着带宽闲置,而两台相邻交换机之间的流量可能被迫绕一段经过根的长路。6 TRILL——“Transparent Interconnection of Lots of Links”——是她的回答,也是她整个职业生涯的综合:它是”把链路状态路由应用于VLAN感知的客户桥接问题”。6 TRILL交换机,称为RBridge,彼此之间运行IS-IS链路状态协议来获知完整拓扑并计算最短路径,因此TRILL”在所有活动链路上建立路径”,而不是把它们阻塞——既有即插即用桥接的韧性与简洁,又有路由的路径效率。6 这是链路状态工作与生成树工作折叠进同一套设计之中。
贯穿这一切的,是一种容易被低估的对简洁的坚持。生成树之所以著名,部分在于它小到能装进一首诗里;她的教科书之所以受人喜爱,在于它们解释而非罗列;她对网络领域的一贯抱怨,是它比所需要的更复杂。对Perlman来说,简洁不是审美偏好——它是让一个协议可证明正确、可靠地自稳定的东西。如果你无法推理一个机制,你就无法信任它会自愈;而你无法推理你脑中装不下的东西。46
方法
通览生成树、IS-IS、那篇拜占庭健壮性论文、安全工作以及TRILL,同样几条坚持反复出现。Perlman的方法与其说是一句口号,不如说是一组长期的习惯。
先为故障情形而设计。 生成树不是一个加了故障处理的转发算法;故障就是它存在所要解决的问题——必须与无环性共存的冗余链路,以及会失效、必须被绕过修复的活动链路。23 这一教训远远超出网络领域:不要先设计顺利路径再补进错误处理,而要先设计故障模式,让顺利路径从一个本就能存活下来的系统中自然落出。这是证据门槛应用于健壮性——“没东西坏掉时它能工作”不是证据;”链路失效时它收敛到正确”才是。
设想恶意,而不只是意外。 最棘手的故障不是沉默的那种;而是已被攻陷、此刻正在撒谎的节点。Perlman的拜占庭健壮性论文把对手当作一项设计输入,而非事后之念。1 这与Adi Shamir用以构建其密码学事业的本能如出一辙——在你问过一个掌控了系统一部分的攻击者能做什么之前,你并不理解这个系统——也正是为什么一道权限边界或一个路由协议,必须针对那个正在主动设法破坏它的参与者来设计。
让它自稳定——无人介入。 生成树最深的美德在于操作人员可以无视它:它自行收敛,并在故障之后重新收敛,无需任何人去画树。2 这种纪律是把恢复推进系统,而不是推进操作手册,因为一个需要人来自愈的网络在凌晨三点是不会自愈的。这与Leslie Lamport带给共识问题的、那种分布式正确性的冲动是同一个:精确定义良好状态,再构建一个能从任意起点回到它的协议。
让它简单到能够推理——也能够讲授。 一个你能装进诗里的协议,是一个你能证明其会收敛的协议;一本解释为什么的教科书,让下一代人能够推理而非背诵。47 这里的简洁不是为简洁而简洁的极简主义——它是信任的前提,是同一种手段上的经济,让最强的机制同时也最可理解,正合最小可敬产品的精神。
做你自己最严苛的审阅者。 STP能用,可Perlman仍然设计了TRILL,用她钻研了一辈子的链路状态思想,去修补STP那被阻塞链路的浪费。6 这一长期习惯,是不断攻击你自己最得意的作品——为那件让你出名的东西指出其局限,并造出它的继任者——这正是质量是唯一的变量化作的实践:问题从来不是”这够好可以发布了吗?”而是”这仍然是正确的设计吗?”
影响链
是谁塑造了她
MIT的数学与AI传统。 在MIT取得两个数学学位与一个博士学位,加上早年在AI实验室对LOGO海龟系统的工作,让她既有证明一个协议正确的严谨,又有把想法做到彻底简单的本能。1 教一个三岁孩子编程,与让一棵生成树装进一首诗,是同一项技能。(奠基性影响)
早期网络互联社群。 她在BBN与DEC的那些年,把她放在了20世纪七八十年代真正构建广域与局域网络的机构内部,那里的问题不是学术性的——环路真的会把真实网络拖垮——而DECnet、IS-IS与桥接上的工作,正是从解决这些问题中诞生的。1(直接影响)
拜占庭故障传统。 她在博士阶段对抗恶意故障健壮协议的专注,把她接上了那条分布式系统思想的脉络——由Leslie Lamport等人形式化——它追问当某些参与者任意、乃至对抗性地行事时,一个系统如何保持正确。1(奠基性影响)
是她塑造了谁
每一个交换式以太网。 生成树协议,标准化为IEEE 802.1D,几十年里运行在几乎每一台受管交换机内部——它正是把冗余网线插进企业网络却不会让它瘫痪的那个无声原因。23
现代数据中心结构。 TRILL及其链路状态桥接思想,把这一领域推向了通过最短路径路由用上所有链路、而不是阻塞冗余的结构,塑造了大型数据中心网络的构建方式。6
一代网络工程师。 通过《Interconnections》与《Network Security》,Perlman教会了这一领域如何去推理网桥、路由器与协议——她那种善于解释的风格,是如此多从业者以他们的方式思考网络的部分原因。7
贯穿的脉络
Perlman是本系列中网络自有韧性的拱心石——那个让一切之下的线路实现自愈的人物。Leslie Lamport构建了关于分布式系统在故障下——包括节点任意行事的拜占庭故障下——保持正确的理论;Perlman则构建了在真实网络中恰好做到这一点的协议,而她的拜占庭健壮性论文,正是Lamport的问题在路由层上的回答。1 Adi Shamir通过针对那个掌控系统一部分的攻击者来设计,让系统变得可信——这与Perlman带给路由的对抗性本能相同,只是沿她自己的方向走了十年。而Tim Berners-Lee构建了一个属于所有人的网,但一个网之所以能触达所有人,是因为它下方那个交换与路由的网络在故障中始终保持连通——也就是说,是因为Perlman所塑造的生成树与链路状态路由。Lamport说定义正确性并证明它能在故障中存活,Shamir说针对对手来设计,而Perlman说:把网络造得能自我修复——无人介入,即便某些节点正在撒谎。(系列桥接)
我从中汲取的
我从Perlman身上一直记得的一课,是先为故障情形而设计。我的本能,像大多数构建者一样,是先写顺利路径——成功的请求、不掉线的链路、规规矩矩的节点——等它能跑起来之后再撒上一点错误处理。生成树是对此的反驳:故障不是一件发生在设计身上的事,它就是设计存在所为的那件事。冗余链路和将死的网线不是有待修补的边界情况;它们就是协议被塑造成那个样子的全部理由,而顺利路径只是从一个本就能存活的系统中自然落出。所以如今当我构建某样东西时——一个同步循环、一条重试路径、一道权限边界——我尽量从”什么会坏,它又如何在没有我的情况下自愈?”出发,而不是把这个问题留到最后才碰。一个需要我凌晨三点醒着才能恢复的系统,是一个我还没有设计完的系统。
第二课是简洁正是让健壮性可信的东西。人们很容易把生成树的优雅——小到能装进一首诗——当作一段动人的传记细节。它不是;它正是要点。如果你无法推理一个机制是否会收敛,你就无法信任它会自愈;而你无法推理你脑中装不下的东西。Perlman的协议之所以健壮,正因为它们简单,而她的教科书之所以历久不衰,在于它们教为什么而非规范。这把简洁在我心中从一个锦上添花之物,重塑成了正确性的一项承重属性。当一个设计复杂到我再也无法说服自己它能从每一种故障中恢复时,那份复杂不是精巧——它是我还没找到的那个bug。
常见问题
什么是生成树协议?
生成树协议(STP)是一个网络协议,由Radia Perlman于1985年在Digital Equipment Corporation发明,并被标准化为IEEE 802.1D,它防止带有冗余链路的桥接或交换式以太网网络出现环路。23 没有它,冗余连接会形成环路,又因为以太网帧没有生存时间,一个广播会沿环路永远绕行,倍增成一场占满网络的广播风暴。STP会自动修复这一点:交换机选举出一个根,每台交换机只保留它通往根的最佳路径用于转发并阻塞冗余链路,留下一棵单一的无环树,仍能触达每一个网段。当一条活动链路失效,算法重新计算出一棵新树并提升一条被阻塞的备用链路,无需任何人介入即可修复连通。2
为什么Radia Perlman被称为”互联网之母”,她又为何不喜欢这个称号?
Perlman常被称为”互联网之母”,因为生成树协议和她的链路状态路由工作,对现代网络如何保持连通至关重要。1 她多年来一直拒绝这个标签,主张没有任何单独一个人发明了互联网——它是许多人和许多技术的成果——而单单挑出一位发明者既不准确,也是一种干扰。5 她还反对这种带性别色彩的表述,认为一个人的性别不该成为审视其毕生工作的视角。5
什么是拜占庭健壮路由?
拜占庭健壮路由是一种经过设计的路由,即便某些路由器不只是失效、而是主动恶意——丢弃流量、谎报网络拓扑或伪造路由消息——也能继续正确地投递数据包。它是Perlman 1988年MIT博士论文《具有拜占庭健壮性的网络层协议》的主题。1 这一区分至关重要:失效节点是沉默而可预测的,而拜占庭(被攻陷的)节点会任意且对抗性地行事,因此协议必须在参与者设法破坏它的情况下仍达成正确投递。把恶意故障当作一项核心设计情形,而非事后的安全补丁,正是Perlman工作贯穿始终的脉络。1
什么是TRILL,它又如何改进了生成树协议?
TRILL(”Transparent Interconnection of Lots of Links”)是Perlman设计的一个协议,作为STP的继任者。6 STP通过阻塞冗余链路来防止环路,这浪费了带宽,还可能迫使流量绕经过根的长路。TRILL转而把链路状态路由应用于桥接:它的交换机,称为RBridge,彼此之间运行IS-IS协议来获知完整拓扑并计算最短路径,因此它”在所有活动链路上建立路径”,而不是禁用它们——既保留了桥接即插即用的简洁,又获得了路由的路径效率与韧性。6
来源
-
“Radia Perlman,” Wikipedia. Born December 18, 1951, in Portsmouth, Virginia. Earned an SB and SM in mathematics and a PhD in computer science (1988) from MIT; doctoral thesis titled “Network Layer Protocols with Byzantine Robustness,” on routing that remains correct in the presence of malicious (Byzantine) failures. At MIT’s AI Lab in the early 1970s she developed TORTIS (Toddler’s Own Recursive Turtle Interpreter System), a LOGO-based system enabling very young children to program a robotic turtle. Career: BBN, then Digital Equipment Corporation (from ~1980), where she invented the spanning tree algorithm and did foundational work on DECnet and link-state routing including IS-IS; later Novell, Sun Microsystems (Sun Fellow, 40+ patents), Intel, and Dell EMC. Holds over 100 issued patents. Contributions to network security include PKI trust models and mechanisms for ephemeral/expiring data. Inducted into the Internet Hall of Fame (2014) and the National Inventors Hall of Fame (2016); ACM Fellow, IEEE Fellow, SIGCOMM and USENIX lifetime achievement awards. Has repeatedly rejected the “Mother of the Internet” nickname. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
“Spanning Tree Protocol,” Wikipedia. “The first Spanning Tree Protocol was invented in 1985 at the Digital Equipment Corporation by Radia Perlman.” “The basic function of STP is to prevent bridge loops and the broadcast radiation that results from them.” The protocol elects a root bridge (lowest bridge ID = priority plus MAC address); all switches then select their best path toward the root for forwarding and block other redundant links, producing a single loop-free active topology. On a topology change, the spanning tree algorithm computes and spans a new least-cost tree, restoring connectivity. The IEEE published the first standard, IEEE 802.1D, in 1990, based on Perlman’s algorithm. ↩↩↩↩↩↩↩↩↩↩↩↩
-
Radia Perlman, “An Algorithm for Distributed Computation of a Spanning Tree in an Extended LAN,” Proceedings of the Ninth Symposium on Data Communications (SIGCOMM ‘85), ACM, 1985, pp. 44-53 (DOI: 10.1145/319056.319004). The original paper describing the Spanning Tree Protocol: a distributed protocol by which bridges in an extended LAN of arbitrary topology compute an acyclic (loop-free) spanning subset of the network. The paper is noted as likely the only software patent on record that includes a poem. ↩↩↩↩↩↩↩↩↩
-
“Algorhyme,” poem by Radia Perlman describing the Spanning Tree Protocol, reproduced in course materials including the University of Washington CSE461 archive and corroborated by the Radia Perlman Wikipedia article. Full text: “I think that I shall never see / A graph more lovely than a tree. / A tree whose crucial property / Is loop-free connectivity. / A tree that must be sure to span / So packets can reach every LAN. / First, the root must be selected. / By ID, it is elected. / Least cost paths from root are traced. / In the tree, these paths are placed. / A mesh is made by folks like me, / Then bridges find a spanning tree.” ↩↩↩↩↩↩
-
“Intel’s Radia Perlman: Don’t Call Her ‘Mother Of The Internet’,” SiliconValleyWatcher, and “Radia Perlman: Don’t Call Me The Mother Of The Internet,” Open Health News (citing a 2014 interview with The Atlantic), corroborated by the Radia Perlman Wikipedia article. Perlman has consistently rejected the “Mother of the Internet” label, arguing that no single individual invented the Internet – it resulted from the work of many people and many technologies – and objecting to the gendered framing of the title. ↩↩↩↩
-
“TRILL (computing),” Wikipedia. TRILL (“Transparent Interconnection of Lots of Links”) is a networking protocol, designed by Radia Perlman (inventor of its predecessor, the Spanning Tree Protocol), for optimizing bandwidth and resilience in Ethernet networks. Described as “the application of link-state routing to the VLAN-aware customer-bridging problem”: TRILL switches (RBridges) run the IS-IS link-state routing protocol among themselves to learn topology and compute shortest paths. Unlike STP, which ensures a loop-free topology by blocking active ports, TRILL “establishes paths over all active links,” enabling more efficient use of network capacity. ↩↩↩↩↩↩↩↩
-
Radia Perlman, Interconnections: Bridges, Routers, Switches, and Internetworking Protocols (Addison-Wesley), and Charlie Kaufman, Radia Perlman, and Mike Speciner, Network Security: Private Communication in a Public World (Prentice Hall), as documented in the Radia Perlman Wikipedia article. Interconnections is a widely used reference on bridging, routing, and internetworking protocols; Network Security is a standard textbook on cryptography and network security. Both are noted for explaining the reasoning behind design choices, not merely the specifications. ↩↩↩↩