作者:蓬岸 Dr.Quest
知乎文章编号:697953965
创建于:2024-05-15 8:41:42
修改于:2024-05-15 10:03:06
万维网,即World Wide Web,其在NeXTSTEP上的起源已广为人知,但相比已经被传说化的“创业故事”而言,早期版本的WorldWideWeb真正的使用体验是什么样子却鲜为人知。一方面,NeXT作为一款面向科研和工程,售价昂贵的工作站电脑,保存至今并仍然能够运行的的已经不多,在国内尤为稀少并被炒至天价。另一方面,大众媒体更乐于Web 1.0/2.0/3.0这样脸谱化的叙事,而不屑、乃至刻意回避互联网发展中的诸多技术细节。
而这篇文章则希望能够打破这些魔咒,帮助爱好者、学校和科技馆以合理的成本,复原相对真实的NeXTSTEP开发环境并运行早期版本的WorldWideWeb,让更多普通人能通过亲自操作体验早期WWW的功能。这篇文章分为两个部分:
NeXTSTEP从3.1版本开始支持Intel x86平台,这让在今天以合理的成本搭建能够直接运行NeXTSTEP的电脑成为可能,而NeXTSTEP 3.3则是其改名为OPENSTEP之前的最后一个版本,相比前两个版本,它有着更长的支持周期(1995-1998)和更完善的驱动库。许多爱好者也在后续为这一版本补充了像NE2000网卡这样流行硬件的驱动,这也让它在今天更容易安装。
NeXTSTEP 3.3的下载并不难找到,WinWorldPC和互联网档案馆都有提供下载
https://archive.org/details/nextstep3-3dev
http://Nextcomputers.org的软件资源库:NextFiles
以及NeXToP的NeXTAnswers存档:NeXToP hOme 2.0
在后面我会反复提起它们。
另外我也建议翻阅NEXTSTEP Release 3.3 for Intel Processors Compatibility Guide,这份兼容性手册略微有点过时
NEXTSTEP and OPENSTEP Resource Page
以及OPENSTEP 4.x and NEXTSTEP 3.3 for Intel Driver List,这份手册更新一点
这篇文章的参考平台是86Box模拟器,由于这款模拟器能比较准确的模拟Socket 7/Socket 370时代的硬件,因此对组装真实运行NeXTSTEP的物理机具备一定参考价值。在对86Box的试验中,我发现大部分Socket 7/Socket 370主板都可以顺利运行NeXTSTEP,包括Intel HX/BX/ZX,SiS 5571、VIA 693A/694X(Apollo Pro 133/A)等,因此选配的难点就剩下三个
免SCSI安装NeXTSTEP
虽然目前大部分NeXTSTEP安装教程,特别是虚拟机相关的教程都使用SCSI光驱,但实际上,NeXTSTEP 3.3是可以完全使用IDE硬盘和光驱工作的,只是其连接方式和常见的方式略有不同。大多数情况下,PC使用双IDE控制器,硬盘连接到第一个IDE口作为主盘,即Primary Master,光驱连接到第二个IDE口作为主盘,即Secondary Master,但这种连接会导致NeXTSTEP无法识别光驱。
在shawcomputing的NeXTSTEP安装教程中:NEXTSTEP and OPENSTEP Resource Page 最后的“Note on ATAPI CD-ROM”提到:
如果您使用 ATAPI CD-ROM 安装 NEXTSTEP,则必须将 IDE 硬盘和 CD-ROM 连接到主控制器。硬盘应配置为主盘或主盘且存在从盘(如果此选项可用)。 ATAPI CD-ROM 应配置为从盘。这通常通过更改设备上的跳线来完成。
因此我们将硬盘设置为Primary Master,光驱设置为Primary Slave,NeXTSTEP就可以顺利从IDE光驱上安装到IDE硬盘,因此也免去了SCSI扩展卡。
显卡选配建议
即使是在NeXTSTEP 3.3发布的1995年,ISA扩展卡仍然相当广泛,因此适用于NeXTSTEP的PCI设备驱动比较有限,但幸运的是NeXT以及苹果后续补充了一些PCI硬件的驱动,特别是几个覆盖型号较广的通用显卡驱动,比如:
S3驱动覆盖了大量流行的显卡,包括S3 732 (Trio32), S3 764 (Trio64), S3 764 (Trio64V+), S3 801, S3 805, S3 864 (Vision), S3 868 (Vision), S3 911等等,在86box中实测,该S3驱动大概支持到Virge GX,但应该不支持Virge GX2,市面上便宜的S3 Trio系列应该全覆盖。
Trident驱动支持Trident 9440/9680显卡,ATI Rage驱动则覆盖ATI 3D Rage, ATI 3D Rage II, ATI 3D Rage II+, ATI 3D Rage Pro,由于没有机会实测,目前还不太确定是否支持市面上最广泛的Rage XL
网卡选配建议
在NeXTSTEP 3.3发布时,市面上大多数以太网卡仍然是10Mbps的ISA网卡,直到1998年100Mbps的PCI网卡才开始广泛使用,NeXTSTEP有两个beta版驱动,分别支持Intel 82557/82558网卡和3Com EtherLink XL(3c905系列)网卡
上述显卡、网卡驱动都在这里可以下载到:https://www.nextcomputers.org/NeXTfiles/Software/NEXTSTEP/Drivers/nextstep_3.3/beta/
此外,由于NE2000 ISA兼容网卡Realtek 8019/8029非常便宜,特别在此说明一下,NeXTSTEP的NE2000网卡驱动可以在这里下载:
https://ftp.nice.ch/pub/next/system/driver/ethernet/
但由于NeXTSTEP对ISA PnP的支持很有限,需要使用DOS启动盘和RSET8019/RSET8029设置工具将网卡设置为非即插即用(non-PnP)模式,并手工设置I/O地址。IRQ等,之后既可以使用NE2000驱动联网。
声卡选配建议
NeXTSTEP 3.3仅支持一款PCI声卡,即ES1371,幸运的是该声卡足够便宜
Releases · novi/SoundBlaster16PCI
对于ISA声卡而言,SoundBlaster和使用AD1848的Windows Sound System声卡驱动已经内建,而雅马哈YMF71x系列声卡则可以尝试beta驱动中的YamahaOPLAudio.pkg.compressed
根据硬件选配建议,就可以在86Box里“模拟装机”了。主板选用精英P6BAP,值得一提的是这款主板直到今天仍然能在淘宝买到,价格不到300元,当然,其他同样使用VIA 693A芯片组的主板价格更低,一百多块即可买到。相比之下Intel 440BX/ZX主板则比较少,而且更贵。
CPU使用经典的赛扬300A,NeXTSTEP 3.3推出时市面上主流的CPU还是Socket 3的486DX/4 100或者5x86,Pentium 100在当时都算比较高端的配置,因此任何Socket 370 CPU都算“超配”了,内存给64M,典型的1998年的配置。
由于上面提到的S3Generic驱动的原因,86Box里几乎所有的S3显卡都可以随便选,但ViRGE/GX2(357)和之后的Savage系列就太新了,NeXTSTEP支持不了。
声卡就选ES1371了,没问题
网卡我选的NE2000,值得注意的是86Box中的RTL8019AS只能模拟PnP模式,并不支持通过RSET8019.exe工具配置,因此只能选纯NE2000。另外86Box中的PCI网卡唯一能被NeXTSTEP支持的应该是AMD PCnet-PCI II。AMD的这几款卡在国内比较难淘,如果真装物理机的话还是Intel或者3Com比较容易
硬盘模拟了一块1.6GB的IDE硬盘,挂在0:0上,即Primary Master,配置少于2GB是有意为之,考虑未来把这个镜像写入到2GB CF卡里挂在物理机上。
光驱模拟52x CD-ROM,挂在0:1上,即Primary Slave,实际测试下来将光驱设为主盘、硬盘设为从盘也没问题。
这样一台模拟的Socket 370平台就装好了。
由于NeXTSTEP 3.3推出时尚无支持光驱启动的BIOS,所以必须先由软驱启动,再从光驱安装系统,在下面的网站上能找到7张软盘镜像:https://www.nextcomputers.org/NeXTfiles/Software/NEXTSTEP/Floppy_Images/
分别是“X86启动盘”,“核心驱动”,“驱动”,“附加驱动”,“beta驱动”,“PC卡驱动”和“68K驱动盘”,但我实际用到的只有三张:
下载到的.floppyimage实际上就是标准的raw镜像,如果要将这些镜像写入到真实的软盘,就需要用到rawwritewin-0.7.zip,而直接将文件后缀改为.img就可以在86Box上挂载。
将NeXTSTEP的user.iso装入虚拟机光驱,Boot_Disk装入软驱启动虚拟机,正常以英文菜单安装,当出现下面提示时,装入Core_Drivers磁盘继续
然后在出现这个提示时,直接装入Beta_Drivers磁盘
即使没有SCSI卡,NeXTSTEP也要求至少加载一个SCSI驱动,才可以继续装入IDE驱动,这里我们随便选一个就可以,比如1. Adaptec 1542CP
然后就可以看到EIDE驱动的选项了,一般我们选4. EIDE and ATAPI Device Controller (v3.35),这个驱动兼容性比较好,可以同时支持硬盘和光驱
然后就不需要安装其他驱动了,直接继续就可以完成安装了。
刚刚安装完成,但没有驱动的NeXTSTEP机器唯一和外界沟通的管道是光驱和软驱,但Windows下创建的FAT12软盘镜像虽然可以被NeXTSTEP读取,但只支持8.3文件名。所以创建光盘镜像更方便一些,值得一提的是,光盘镜像的ISO 9660文件名格式应选为Windows/Unix,这样NeXTSTEP能够正常识别长文件名。
第一类驱动是pkg驱动,比如S3GenericDisplay.pkg.compressed,系统可以自动解压它成为原始的.pkg格式。
安装pkg格式需要root权限,因此需要先选中pkg文件,然后在菜单中Services → Open Sesame → Open As Root,“芝麻开门”一下才能正常安装
这一类驱动通常以tar或者tar.gz打包,NeXTSTEP的文件浏览器可以自动解压tar,但不能解压gz,如果是tar.gz格式,需要先在终端程序Terminal中使用gzip -d命令解压为tar,然后再在文件浏览器里解包。
安装config驱动比较容易,直接双击打开.config文件即可安装完成。
在NeXTAdmin中的Configure.app完成驱动的选择和设置,出于对昂贵而有限(256 KB)的显存容量的妥协,多数NeXT电脑都以黑白灰阶显示换取高分辨率(1120x832),只有少数NeXTstation Color工作站(1.5MB显存 4096色)和安装有NeXTdimension显卡(4MB显存 32位真彩色)的NeXTcube才支持彩色显示。
因此将显示模式设置为1152x864,8为灰阶能够得到最接近典型的NeXTcube和NeXTstation体验。之所以强调这一点,是许多人夸大早期Macintosh和NeXT电脑具有“优异的显示色彩”,却忽视了两者都在彩色和分辨率的权衡中完全偏向高分辨率的一端。
NeXTSTEP上提供的驱动很有限,但通过对驱动进行修改,可以让NeXTSTEP驱动有机会支持原本不支持、但相似的硬件,一个典型的例子是NeXTSTEP中的Cirrus Logic GD5434驱动同样可以支持GD5446,而后者是QEMU默认的PC SVGA显卡。
Cirrus Logic GD5434驱动可以在这里下载: https://www.nextcomputers.org/NeXTfiles/Software/NEXTSTEP/Drivers/nextstep_3.3/released/
NeXTSTEP在根目录下有一个private隐藏目录中,而驱动则在/private/Drivers/i386目录中,每一个驱动都是一个.config目录
类似Windows下的硬件驱动以.ini文件记录适配的硬件信息,NeXTSTEP的硬件信息存在.table文件中,因此我们就可以修改驱动的配置文件来尝试让它支持之前不支持的硬件。
以GD5434驱动增加GD5446支持为例,它包含了几个.tables文件适配不同的硬件,因为大多数GD5446显存大于2MB,而且安装在PCI插槽,因此我们猜测需要改动的文件是PCITwoMB.table。之后在Terminal中尝试改动PCITwoMB.table,记得先用chmod +w添加写入权限
su
cd /private/Drivers/i386
cd CirrusLogicGD5434DisplayDriver.config
chmod +w PCITwoMB.table
vi PCITwoMB.table
我们可以看到里面有一行Auto Detect IDs,后面跟着的就是该驱动对应的PCI ID,00a8是GD5434的DeviceID,0013则是Cirrus Logic的VendorID
PCI ID可以在这里查到:PCI Devices
我们可以查到GD5446的DeviceID是00b8,它完整的PCI ID就是00b81013我们把这个ID加入到Auto Detect IDs一行,两个PCI ID之间用空格隔开
"Auto Detect IDs" = "0x00a81013 0x00b81013"
然后原本仅适用于GD5434的驱动就可以用于GD5446了,在Configure.app中重新安装显卡驱动,可以直接识别并顺利安装。利用这种办法,可以略微扩大NeXTSTEP支持的硬件范围。
如果你使用86Box模拟器,需要Npcap才能桥接网络,但需要注意Npcap对Wi-Fi桥接并不总是有效,因此我使用的是有线网卡。如果使用SLiRP方式,则FTP可能工作不正常,请自己权衡。如果是物理机则正常连接网线即可。
配置好网卡驱动后,如果看到这个画面,大概说“服务器没有响应”,那么恭喜,网卡驱动已经正常启动了,按Ctrl-C跳过搜索服务器即可进入系统。NeXTSTEP默认工作在由NetInfo驱动的工作站网络中(后来Mac OS X也保留了NetInfo,但重要性大大削弱了)。对于单独的工作站,有一篇指南专门讲它的设置
https://www.vintagecomputer.net/Next/TjLs_Cable_Modem_Guide.pdf
为了减少各位阅读英文文档的痛苦,我在这里简单讲一下网络的设置,大概分为三个部分:
这一部分简单直接,在NeXTAdmin中打开HostManager,选Local...菜单就可以改IP地址了。因为不使用NetInfo,所以选Use local domain only,仅使用本地域,其他IP地址,广播地址,子网掩码,路由器按照一般IP网络的配置填写就可以。填写完会要求重启。
完成这一步就已经有IP地址了,NeXTSTEP中的ping命令需要root权限,在Terminal里先打su切换到root,然后就应当能ping通路由器。
NeXTSTEP需要给新添加的IP地址加入一个主机名,不然一些网络功能不能启动,WorldWideWeb也会闪退,TjLs_Cable_Modem_Guide中介绍的是通过NetInfoManager添加主机名的办法,比较容易误操作,我自己的习惯是在HostManager里添加。
在菜单中选Host → New,然后填入本地主机名,IP地址,Ethernet Address空掉不填,主机别名一般就是主机名后面加.local,然后保存即可。
NeXTSTEP并没有为DNS设置提供图形化的工具,但兼容BSD标准的resolv.conf,因此在/etc目录下建立它就可以:
cd /etc
su
vi resolv.conf
然后使用vi编辑器,加入DNS服务器的信息即可
nameserver 192.168.1.254
重新启动系统,它就能ping通公网上的域名了。
这个系列的下一集,我们将安装NeXTSTEP开发工具(也是XCode的前身),编译1992年的WorldWideWeb代码并修复它在X86上运行的一点小bug。