看到有人提到友商的系统了,作为竞争对手我也来说两句:
军工(和航天)代码没那么神秘,就是需要准守一些特定的规范,规范就是
@高天的回答里写的那些。
简单点说,就是整个操作系统的运行必须是确定的:
不能有动态内存分配,不能有动态任务创建、删除……总之一切不确定性的东西都不允许有;
很多人都只有x86的CPU有个超线程的概念吧,一个核上跑两个线程,但超线程会影响两个线程执行的确定性,在军工航天领域,超线程必须关掉;
现代操作系统都支持虚拟内存吧,但缺页中断的执行时间是不确定的,所以必须关掉虚拟内存,必要的时候关掉页表也是可以的。
代码的确定性可以大概理解为:如果天上有个卫星,上面的OS某个任务跑了10秒,地面上有一个一模一样硬件配置的计算机同样的OS,也跑了10秒,在输入状态一致的情况下,两个计算机里的东西应该是一模一样的。
军工航天类的代码要求的规范和限制比较多,比如必须符合某某规范才能在飞行器上使用(具体的看这个回答:
如何评价中航计算机所研制的天脉操作系统? - 嵌入式系统)等等。
要求多并不意味着代码质量一定很高 ,因为要求多、限制多,代码往往看起来比较奇怪。而且由于历史原因,如果一个代码能工作,轻易是不允许改的, 改动代码要经过的审查流程往往比改代码麻烦多了 。比如现在个人电子市场早就进入64位时代了,但军工航天领域很多还是32位的,这些代码要是放到64位系统里肯定挂,但因为军工航天不需要这些,所以就不能改,也不需要改。
不要对军工代码有什么神秘感,其实一点都不神秘,就是要求多,测试严,审查多。在规范允许的范围内,代码写的再烂也没关系。
另外,由于code review是要花钱的,所以代码一般都不长,否则对于OS厂商来说,code review的成本就太高了(注:第三方公司负责review,一行大概几美元)。
美国军工行业用的Integrity是GreenHills的,这个公司要求所有写代码的人必须是美国公民或者持美国绿卡的人,公司不大,全靠国防部养着,我估计知乎上没有人能说清楚具体的细节。
国内大部分用的是VxWorks的改版,说是改版,可以理解为合理的学习、复制等等,安全性倒不是问题,因为能拿到的东西都是有源码的,细节就不展开说了。
如果题主对军工代码有兴趣,可以先研究一下ARINC的规范,这东西跟军工上用的差不太多,不过要找到能支持这种规范的开发环境就很麻烦了,有兴趣题主可以自己构造一个,难倒是不难,就是用起来很不舒服。