这不是很多很多年前的博文了吗为啥要拿出来提个问题。本质上来说当然没有什么不可行的,你考虑下整个系统使用一个硬件提供的malloc接口,接口不返回数值类型的指针,而是某种符号,内部通过不可见的查找表对应到物理内存;甚至更进一步,是个硬件提供的new,分配出的对象通过硬件GC。也没有什么本质上不可行的对吧?就是把整个操作系统 + 应用程序都灌到JVM这样的虚拟机(或者硬件实现的真机)里面去运行罢了,动态加载外部代码那都是非常成熟的技术了,甚至给不可信的代码提供一层沙箱环境,那也都是可行的嘛。而且原文也说了,LISP Machine不都实际造过嘛。
为什么最终是UNIX胜利?王垠这样的理想主义者发这种梦的时候,总是忘记软件业甚至是整个工业界最重要的原则(至少是之一):
低耦合,高内聚!
能存活几十年的工业品,是不能从一开始就设计成完美的样式的,只有永恒的乌托邦里面的东西,才能从一开始就设计成永恒不变的完美形态,而真实的工业品的设计必须是忒修斯之船:它会在发展的生命周期中,不断更新自己的每一个组件,一次一次地变得焕然一新,才能不断存活下去,不能再替换部件的一天就会是消亡的一天。而一个将硬件、数据存储、操作系统、编程语言、应用程序、内存分配规则全部藕合在一起的设计,必然是牵一发而动全身的,无论最开始的设计多么精巧,到了时代发展的时候,无论哪个方向取得了技术进步,新技术要怎么跟其他部件重新平衡?靠一个总架构师不停修改设计,永远不可能赶上各个方向都有众多团队各自竞争、各自独立发展的效率。
工业和手工业的区别就在这里,手工业可以造出很精巧的产品,但是将每个细小的组件都发展成标准件之后,工业生产的威力将会完全彻底碾压手工业,这对软件业也是完全一样的道理。有的人也许会觉得为了配合标准件做的设计是多余的,但正是这种标准化突破了单个人的界限,让集体的力量得以最大化。