我最近对建立自己的Linux发行版感兴趣(可能仅适用于家人和朋友)。我已经广泛研究过是否应该定制现有的发行版(例如Arch Linux,Debian)或从头开始构建(LFS)。我得出结论,从头开始构建最符合我的需求(我没有时间限制)。
我的主要问题是:
是否有可能构建一个充当完整操作系统的应用程序,并只是编写Linux发行版以在启动时运行它?
第二个主要问题:
这样做会限制程序的安装吗?开发人员是否必须在其模拟操作系统上运行自定义版本的软件?
我在此看到的问题:
- 如果我使用像c#这样的语言,那会有用吗?还是需要windows natives?
- 如果我使用java(可能不是),但如果我愿意的话,我是否必须使用发行版打包JRE?
- 如果我使用类似java的东西,我可以使用像LWJGL这样的库(对于像窗口框这样的东西用于openGL)
-java或c#使用特殊的文件系统方法?我是否需要使Linux基础构建文件系统以供VM语言使用?或者我可以在模拟Os中安排所有这些吗?
- VM语言的性能问题?
- 包装JRE之类的东西是否有任何法律问题,或者我是否找到了使用Windows原生代码的方法?
附加说明:
- 我不关心时间,即使只是文件系统需要3年。
- 如果无法从头开始构建,我是否可以自定义发行版以便像这样运行?
- 我明白我必须让linux处理像硬件驱动程序这样的东西,因为与硬件通信并不是我的事情。这是否意味着我必须定制像Arch Linux这样的东西?
我很抱歉这里有很多问题,如果我有足够的声誉可以增加500个代表奖金,我会的。
答案 0 :(得分:2)
操作系统确实是一项艰巨的任务。已经尝试构建一个系统来在C#中创建名为Cosmos的自定义操作系统,我已经考虑了几次。但在大多数情况下,应用程序可能必须专门为操作系统构建。现在你提醒我了,我可能真的很烦。
显然,结果不是Linux,而是使用Cosmos构建的自定义操作系统。这可能是您使用C#管理的最接近的。
总而言之:如果你的目标是在最基本的机器上执行托管代码,那么Cosmos可能就是你想要的。你仍然会做几乎所有事情,但你会对机器的实际内部有一些隔离。
编辑:替代方案包括不使用Visual Studio的Mosa和Singularity,它们只能用于研究,但是由Microsoft直接生成。
答案 1 :(得分:1)
简短的回答是将其添加到您的内核命令行:
init=/path/to/my/application
通常Linux内核启动的第一个进程是init
process。 init
负责为启动时需要启动的所有其他内容运行启动脚本 - 例如内核模块,守护进程,控制台登录/ x桌面。
您可以告诉内核使用您喜欢的任何用户空间二进制文件而不是默认的/sbin/init
,如上所述,尽管您可能仍希望运行一些启动脚本。
虽然更有可能,您需要编辑启动脚本以运行一个应用程序(您的应用程序文本还是基于X的?)
或者你可以破解内核在内核空间中运行你的应用程序,甚至可能永远不会启动任何进程。但这将是调试/维护的噩梦。