跳转到内容

Linux 网络/Linux 网络内核开发简史

来自维基教科书,开放的书籍,开放的世界

开发一个全新的 TCP/IP 协议栈内核实现,使其性能与现有实现一样好,并非易事。决定不移植现有实现之一是在当时,因为当时人们还不确定现有的实现是否会被 U.S.L. 提出的诉讼案的限制性版权所束缚,并且当时人们对于以不同的方式,甚至可能比已经做过的更好,来完成这件事抱有很大的热情。

最初自愿领导内核网络代码开发的是 Ross Biro [email protected]。Ross 制作了一个简单且不完整但大部分可用的例程实现集,该集合由 WD-8003 网络接口卡的以太网驱动程序补充。这足以让很多人测试和试验该软件,有些人甚至设法将机器连接到这种配置的实时互联网连接。Linux 社区内部推动网络支持开发的压力正在增加,最终,对 Ross施加的一些不公平的压力与他自己的个人承诺相结合,超过了带来的益处,他辞去了首席开发者的职位。

Ross 在启动项目和承担在如此有争议的情况下真正产生有用的东西的责任方面的努力,催化了所有未来的工作,因此是当前产品成功的重要组成部分。

Orest Zborowski [email protected] 为 Linux 内核制作了最初的 BSD 套接字编程接口。这是一项重大进步,因为它允许许多现有的网络应用程序移植到 Linux,而无需进行重大修改。

大约在同一时间,Laurence Culhane [email protected] 开发了 Linux 的第一个驱动程序来支持 SLIP 协议。这些驱动程序使许多没有访问以太网网络的人能够试验新的网络软件。同样,有些人利用这个驱动程序并将其投入使用以连接到互联网。这使更多的人了解了如果 Linux 拥有完整的网络支持,可以实现的可能性,并且增加了积极使用和试验现有网络软件的用户数量。

Fred van Kempen [email protected] 也一直积极参与构建网络支持的工作。在 Ross 辞去首席开发者职位后的一段不确定的时期之后,Fred 提供了他的时间和精力,并接受了这个角色,几乎没有受到反对。Fred 对他想要让 Linux 网络软件发展的方向有一些雄心勃勃的计划,他开始朝着这些方向前进。Fred 制作了一系列名为 NET-2' 的内核代码(NET' 代码是 Ross 的),许多人能够非常有用地使用它。Fred 正式将一些创新列入开发议程,例如动态设备接口、业余无线电 AX.25 协议支持以及更模块化的网络实现设计。Fred 的 NET-2 代码被相当多数量的爱好者使用,随着软件有效的消息不断传播,这个数量一直在增加。当时的网络软件仍然是针对标准版本的内核代码的大量补丁,并没有包含在正常版本中。NET-FAQ 以及随后的 NET-2-HOWTO' 描述了当时相当复杂的让它全部工作的过程。Fred 的重点是开发对标准网络实现的创新,这需要时间。用户社区越来越迫切地希望得到一个可靠且满足 80% 用户需求的东西,而且,与 Ross 一样,Fred 作为首席开发者的压力也越来越大。

Alan Cox [email protected] 提出了一项旨在解决问题的方案,旨在解决这种情况。他提议,他将接受 Fred 的 NET-2 代码并对其进行调试,使其可靠且稳定,以满足那些没有耐心的用户群,同时减轻 Fred 的压力,让他能够继续他的工作。Alan 开始着手进行这项工作,取得了一些不错的成功,他的第一个版本的 Linux 网络代码被称为 Net-2D(ebugged)。该代码在许多典型配置中都能可靠地工作,用户群也很高兴。Alan 明显有自己的想法和技能可以贡献给这个项目,并且围绕 NET-2 代码的发展方向展开了许多讨论。在 Linux 网络社区中形成了两个截然不同的派别,一个是“先让它工作,然后让它更好”,另一个是“先让它更好”。Linus 最终仲裁并为 Alan 的开发工作提供了支持,并将 Alan 的代码包含在标准的内核源代码分发中。这使 Fred 处于一个艰难的境地。任何继续开发都将缺乏积极使用和测试代码的大量用户群,这意味着进度会很缓慢而且很困难。Fred 继续工作了一段时间,最终退出了,Alan 成为了 Linux 网络内核开发工作的新的领导者。

Donald Becker [email protected] 很快展现出他在网络底层方面的才华,并制作了大量的以太网驱动程序,当前内核中包含的几乎所有驱动程序都是由 Donald 开发的。还有其他人做出了重大贡献,但 Donald 的工作效率很高,因此值得特别提及。

Alan 继续对 NET-2-Debugged 代码进行了一段时间的改进,同时努力解决“TODO”列表中未解决的一些问题。到 Linux 1.3.* 内核源代码发展壮大时,内核网络代码已经迁移到 NET-3 版本,当前版本就是基于此版本。Alan 处理了网络代码的许多不同方面,并在来自 Linux 网络社区的一系列其他有才华的人员的协助下,将代码朝着各个方向发展。Alan 制作了动态网络设备以及第一个标准的 AX.25 和 IPX 实现。Alan 继续对代码进行微调,慢慢地对其进行重构和增强,使其达到今天的状态。

PPP 支持是由 Michael Callahan [email protected] 和 Al Longyear [email protected] 添加的,这也是增加积极使用 Linux 进行网络连接的人数的关键因素。

Jonathon Naylor [email protected] 通过大幅增强 Alan 的 AX.25 代码,添加了 NetRom 和 Rose 协议支持,做出了贡献。AX.25/NetRom/Rose 支持本身就非常重要,因为除了 Linux 之外,没有其他操作系统可以吹嘘对这些协议的标准原生支持。

当然,还有数百人对 Linux 网络软件的开发做出了重大贡献。其中一些你将在后面的技术特定部分遇到,其他人贡献了模块、驱动程序、错误修复、建议、测试报告和道义支持。在所有情况下,每个人都可以声称自己发挥了作用并贡献了自己的力量。Linux 内核网络代码是 Linux 风格的无政府主义开发所能取得的成果的绝佳示例,如果它还没有让你感到惊讶,那么它肯定会让你很快感到惊讶,开发并没有停止。

华夏公益教科书