如何权衡参考和创新
在开发过程中,我一直有的一个疑惑就是该如何权衡是参考Linux写还是理解机制然后自己手搓。
参考Linux的实现来写会比较轻松一点,但是有一个问题就是,目前的DragonOS在完成程度上远不及Linux,在参考Linux的时候会发现,有时候只是实现一个小的模块,但是追Linux源码却很深,会发现这个小模块会越写越深,容易偏离主线。
如果说我们要在理解机制的基础上手搓一个DragonOS的模块的话,虽然实现目前的需求可能需要的代码量远不及参考Linux的多,但是也很容易出现错误的架构设计,以及后续出现功能不兼容,要改又得大改的情况。
4 个赞
确实,这个太真实了。我觉得反过来想linux当年一开始的架构设计未必是大而全的,是经过不断迭代之后,才变成现在这样。
我觉得参考借鉴还是非常必要的,毕竟是前人的智慧嘛。但越写越深的问题确实存在,一个小小的功能,可能要写很多地方。但从另外一个角度来想,这是节省了我们之后再次重构的工作量。
我目前觉得,对于linux里面一些简单的功能,感觉扩展性不大的,可以在理解基础上去编写。
但有些架构设计比较庞大的地方,可以在它的基础上稍微简化,然后进行开发。
不过有一说一,借鉴还是最快的方式。尤其是我们现在还缺少具有比较强的架构设计能力的人才的时候。
1 个赞
而且在开发的时候,我觉得要按照优先级来考量是否在理解基础上自己写。
就像之前那个text UI,当时只是觉得能用就行,并没有想到我们现在的需求:要能够接入ssh,能够支持完整的tty的功能。
所以最开始实现是一个比较简单的,然后能满足需求的。因为当时,它的优先级并不是特别高。
直到我们现在碰到了新的需求之后,才发现原来的架构设计不满足了,需要重新去写,就是你现在正在开发的这个部分。
1 个赞
有些几乎一成不变的,非常需要根据标准规范来实现的,我的建议就是直接对着linux的逻辑进行借鉴学习。
比如说那个elf的解析与加载,它的标准规范已经规定好了,我们自己写的话,要特判各种情况,会比较难以正确实习各种情况。这种时候,照着linux的进行模仿是一个非常不错的选择,毕竟真的出了什么坑点,也可以从他那里找到部分答案。
还有包括设备驱动,这个东西也是非常坑的,而且有时候可能是硬件的bug软件这边要写点代码来特判。这里相关的部分,我的想法也是直接照着linux的抽主干功能来写。
1 个赞
比如有一些Flag的行为之类的,这些就只能对着抄了,不然后面出现行为不一致的情况也很难debug