在我看来,程序员(尤其是Comp.Sci.grads)试图解决的最常见的过于雄心勃勃的项目是构建自己的操作系统.(尝试创建自己的编程语言+编译器可能更常见,但不是那么雄心勃勃.)
对于那些(像我一样)愚蠢的尝试:除了庞大的规模,你在尝试从头开始创建自己的操作系统时遇到的最大问题或意想不到的障碍是什么?
编辑:一个很棒的操作系统问题:在操作系统开发中有哪些资源?
能够从实际经验中说话(AROS,最大的障碍是:
母鸡和鸡蛋(没有操作系统< - >没有应用< - >没有用户< - >无法吸引开发者)
为什么甚至试图与Windows竞争?Apple没有成功,他们有很多钱,尽管有一个庞大而热情的社区,但Linux并没有成功.
大公司根本不感兴趣将他们的应用程序带到您的操作系统(Adobe Acrobat Reader,MS Office,Macromedia Flash,Sun的Java).没有这些,也没有好的OSS替代品,你就无法吸引用户.
这需要很长时间.在我的情况下,获得1.0已经大约15年了(我们还不是100%).
兼容性.为了获得任何用户,您必须与存在的东西兼容(以便人们可以继续使用他们的数据等).如果您兼容,为什么要更改您的操作系统?
所以如果你打算编写自己的操作系统,你应该考虑这个:
这需要很长时间
在最长的时间里,你将独自一人.我很幸运,因为我有一个非常狂热和专注的Amiga社区,它不会放松.
您必须找到一个利基,在那里您可以提供其他操作系统无法提供的服务.
能够做到这一点的人往往会得到更好的工作机会,因为他们认为"编写操作系统很难":)
您将成为一个非常小的精英程序员小组的成员,他们可以说"我编写了自己的操作系统,它可以做的不仅仅是打印'Hello world!'"
去过也做过.对我来说,最大的障碍是设备驱动程序.对OS核心进行编码是"有趣的部分",但是如果不能进行I/O(磁盘,键盘,视频,网络,至少)它就没用了.今天,如果我再次有时间并且愿意参与这样的项目,我可能会针对Xen VM而不是原始硬件 - 如果没有别的话,那么因为它隐藏了许多丑陋的x86特性以及硬件.Xen提供了一个很好的统一,独立于硬件的I/O设备视图,并且仍然可以让您有足够的自由来玩"有趣"的OS部件(mm,进程管理,同步,中断等).
最大的路障?我想当你发现规范中有多少差距以及各种实现中有多少bug时.
说真的,即使您拥有所有组件的所有规格(即USB,DMA,IRQ,您的CPU ......),您会发现a)某些事情未被指定(即如果您发送某个序列会发生什么您的USB设备)和b)有些事情只是被窃听,您需要解决它们(即CPU中的几十个错误,在英特尔和AMD发布的CPU勘误表中有详细说明)
我不知道在现代操作系统中有多少个bug的解决方法,但由于Linux和*BSD是开源的,他们的驱动程序会告诉你很多,即这个.并希望得到一些像这样的严重负面副作用.
所以,是的,如果你试图编写一个操作系统,请准备好在硬件制造商诅咒很多,并开始失去对现代PC质量的信心:-)