19

在我看来,程序员(尤其是 Comp. Sci. grads)试图解决的最常见的过于雄心勃勃的项目是构建自己的操作系统。(尝试创建自己的编程语言 + 编译器可能更常见,但远没有那么雄心勃勃。)

对于那些(像我一样)愚蠢到尝试尝试的人:除了庞大的规模之外,您在尝试从头开始创建自己的操作系统时遇到的最大问题或意外障碍是什么?

编辑:一个很棒的操作系统问题:操作系统开发入门有哪些资源?

4

6 回答 6

20

能够从实际经验中说话(AROS,最大的障碍是:

  • 母鸡和鸡蛋(没有操作系统 <-> 没有应用程序 <-> 没有用户 <-> 无法吸引开发人员)
  • 为什么还要尝试与 Windows 竞争?苹果没有成功,他们有很多钱,Linux 也没有成功,尽管有一个庞大而热情的社区。
  • 大公司根本没有兴趣将他们的应用程序带到您的操作系统(Adobe Acrobat Reader、MS Office、Macromedia Flash、Sun 的 Java)。没有这些,也没有好的 OSS 替代品,就无法吸引用户。
  • 这需要很长时间。就我而言,获得 1.0 大约需要 15 年(我们还不是 100%)。
  • 兼容性。为了获得任何用户,您必须与现有的东西兼容(以便人们可以继续使用他们的数据等)。如果您兼容,为什么要更改您的操作系统?

所以如果你打算编写自己的操作系统,你应该考虑这个:

  • 这将需要很长时间
  • 在最长的时间里,你将是一个人。我很幸运,因为我有一个非常狂热和专注的 Amiga 社区,它不会松懈。
  • 您必须找到一个可以提供其他操作系统无法提供的服务的利基市场。
  • 能做到这一点的人通常会得到更好的工作机会,因为人们认为“编写操作系统很难”:)
  • 您将成为一小群精英程序员中的一员,他们可以说“我编写了自己的操作系统,它可以做的不仅仅是打印‘Hello world!’”
于 2008-12-04T14:40:42.007 回答
9

去过也做过。至少对我来说,最大的障碍是设备驱动程序。对操作系统内核进行编码是“有趣的部分”,但是如果不能进行 I/O(至少是磁盘、键盘、视频、网络),它就毫无用处。今天,如果我再次有时间和意愿参与这样的项目,我可能会瞄准 Xen VM 而不是原始硬件——如果没有别的原因,那么因为它隐藏了 x86 和硬件的许多丑陋特质。Xen 提供了一个很好的统一的、独立于硬件的 I/O 设备视图,并且仍然给您足够的自由来玩“有趣的”操作系统部分(mm、进程管理、同步、中断等)。

于 2008-12-21T20:59:25.973 回答
5

最大的路障?我认为这是当您发现规范中有多少差距以及各种实现中有多少错误时。

说真的,即使您拥有所有组件的所有规格(即 USB、DMA、IRQ、您的 CPU ......),您也会发现 a) 有些东西没有指定(即如果您发送某个序列到您的 USB 设备)和 b)有些东西只是被窃听了,您需要解决它们(即英特尔和 AMD 发布的 CPU 勘误表中详细说明的 CPU 中的数十个错误)

我不知道现代操作系统中有多少错误解决方法,但由于 Linux 和 *BSD 是开源的,它们的驱动程序会告诉你很多,即这个. 并期望得到像这样的一些严重的负面副作用。

所以,是的,如果您尝试编写操作系统,请准备好诅咒硬件制造商并开始对现代 PC 的质量失去信心 :-)

于 2008-12-05T18:48:43.453 回答
3

我认为现在很多本来是优秀程序员的人都不知道他们对计算机的工作原理知之甚少。您需要认真掌握基础知识才能让机器从磁盘引导您的操作系统,而如今这种类型的知识传播得非常少。现在你也找不到关于它的书架。

有趣的是,几周前我问了一个关于 SO 的问题,其中涉及 10 到 15 年前严肃 PC 编程的基础知识类型,一位评论者说他们认为这是一个硬件问题。

我根本没有敲他们,但我认为这是对技能如何变化的有趣反思。

于 2008-12-05T18:38:28.170 回答
2

我认为到目前为止,最大的障碍是用户——在你构建了大部分工作系统之前,你不太可能拥有任何用户。没有用户,您就没有功能请求、错误报告,因此动力有限。但是,即使您确实构建了一个可以工作的操作系统,也不能保证您会获得用户群,除非您能找到一个吸引人们的钩子 - 是什么让您的操作系统与众不同,让人们愿意尝试测试版,坚持下去当几乎没有任何工作应用程序移植到它时,等等。

您可能有兴趣查看SkyOS - 它主要由单个开发人员(现在是一个小型开发团队)开发。维基百科的文章也有很好的总结。我认为这是一个很好的例子,说明如何可以承担如此艰巨的任务并取得相当好的结果。他们用 SkyOS 做了一些有趣的事情,看到这在很大程度上来自一个人在业余时间的努力,这特别酷。

于 2009-01-18T21:12:03.733 回答
0

编写操作系统会遇到与其他大型软件项目相同的问题。

它缺乏明确定义的目标,并且由于缺乏经验而存在时间表/估计问题。

程序员首先创建一个“hello world”类型的操作系统也是有用的,这样他/她就可以学习操作系统开发背后的概念,然后可以专注于开发操作系统(而不是学习操作系统概念)。

于 2008-12-05T15:46:20.950 回答