
最近(6月10日至11日),下一次
OSDay科学实践会议在莫斯科举行。 这次会议在数学学院举行。 V.A. Steklov RAS。 正式地,它专门用于操作平台和系统软件的开发工具。 像往常一样,会议上讨论的主题不仅限于正式陈述,而且提出的问题是从不同角度考虑的,并讨论了解决这些问题的各种方法。 不同的观点和方法-我认为这是会议与众不同之处。 因此,例如,在会议的第二天结束时,实际上是在
闭幕式上 ,组织者之一Dmitry
zavalishin (
dzavalishin )引起了激烈的讨论,即C编程语言实际上已经过时了,有必要进行开发(包括操作系统)至少使用内存管理的语言。 我将在本文的会议上提出我对这次讨论的看法以及我感兴趣的其他主题。 我对谁问有趣呢?
展览会
我将不首先回顾报告,而首先是展览,这是会议的一部分。 几家公司已经展示了他们在系统软件领域的发展。 这些主要是操作系统,但是,例如,除了操作系统之外,RED SOFT公司还引入了基于
“ Firebird”项目的DBMS“ RED数据库”。 在
回顾以前的OSDay会议之一时,我已经提到了此DBMS。 对我来说,新信息是它已移植到
Elbrus体系结构中 。
其他参展商的产品中宣布了对Elbrus体系结构的支持。 当然,Alt-Linux OS在Elbrus处理器上运行的信息对我而言并不是新闻。 像通常一样,Basalt-SPO的员工带来了一个基于Elbrus的展台,并在此平台上演示了其OS的操作。 但是我在
会议评论中也多次谈到的QP OS横幅
上宣布支持Elbrus处理器的事实令我感到惊讶。 毕竟,我们为将Embox移植到该架构上做了很多努力,我们也在
集线器上写过 事实证明,不幸的是,这不是e2k架构的完整端口,启动是在x86命令转换模式下进行的,正如您所知,该模式已在Elbrus处理器中提供。
对所有硬件平台的支持是所有参展商的功能(RusBITech-Astra除外,但正如您所知,它们都有自己的定位)。 RED SOFT在RaPi上展示了其RED OS(如果我理解正确,那么这是GosLinux的后继产品,该产品已在国内软件注册表中列出)。 QP OS已宣布支持ARM。 但是到目前为止,Alt Linux是跨平台最多的。 同事们不仅在国内的Elbrus和贝加尔湖中展示了作品,而且还在例如
RISC-V这样相对罕见的架构中展示了作品。
信息安全
软件安全性的主题非常广泛。 在会议上几次解释说,有几种不同类型的安全性,更确切地说是什么是安全性的定义。 它们来自英语的安全性,安全性,可靠性等。 因此,发言者通常会谈论目前正在考虑哪种安全性。 尽管每个人都同意很难谈论信息安全性(安全性),但是如果不能确保功能安全性(安全性)的话。
在信息安全部分中,清晰可见划分为安全-安全的惯例。 例如,Linux内核开发人员Alexander Popov(
a13xp0p0v )在
上次会议上作了题为“ STACKLEAK如何提高Linux内核安全性”的演讲,提出
了 “ Linux内核安全性功能图”,该图表明信息安全的关键在于优质软件领域。 毕竟,大多数安全问题都是标准的:缓冲区溢出,堆栈溢出,从系统调用返回时不清除堆栈等。您可以在
github上查看他的项目。 昨天发表在
哈伯卡巴斯基实验室
的Ekaterina Rudina的
一份报告也证明了软件安全性概念含糊
不清的问题,“建立,协调和限制操作系统需求的物联网安全性成熟模型”。 从该报告得出的结论是,将安全性概念应用于不同区域甚至不同类型的设备和产品时,可能会有所不同。 嗯,这很明显,例如,为什么在健身手环上使用了防病毒软件。 因此,包括卡巴斯基实验室在内的
工业互联网联盟提议使用IoT安全成熟度模型(IoT SMM)来为特定案例制定安全性概念。
我认为,由于安全性和安全性难以区分,因此关于纯信息安全性的报告很少。
OpenSSL提交者Dmitry Belyavsky的
报告 “软件托管:来自开源世界的一种方法”就是一个很好的例子。 作者在其中谈到了支持国家密码技术标准的困难。
功能安全
会议的几乎所有报告中都以一种或另一种形式提供了功能安全性(安全软件)。 毕竟,如果您更深入地看,即使在已经提到的有关C语言过时的讨论中,也可以理解该语言是不安全的,并且借助它的帮助,“踩脚”非常简单。
从会议上的报告来看,在使用工具方面可以看到提高了与会人员软件的功能安全性(可靠性)。 虽然,这可能是对会议已宣布主题-工具的致敬。 因此,绝大多数报告恰恰提出了一种工具性方法。 ISP RAS会议的组织者之一专门从事静态和动态代码分析工具的开发。 实际上,ISP RAS通过
Alexander Gerasimov的演讲“在安全软件开发周期中使用自动程序分析工具”来定下基调。
关于开发静态分析仪的主题,Advalange公司的
Vladimir Kozyrev发表了
一份报告 “开发用于收集和分析车载软件覆盖率的工具”。 提出的工具包是根据
DO-178C标准验证车载软件的目的而开发的,但是由于分析的覆盖率代码是普通C,因此该工具包不仅可以在车载软件中使用,还可以使用。
除了有关工具开发的报告之外,还有一些有关使用类似(或相同)工具的经验的报告。 例如,来自
RusBITech -Astra
的Pyotr Devyanin的
一篇题为“使用工具的经验来增强对OSRA Astra Linux特别版的安全机制的信心”的报告谈到了将这些工具应用于其操作系统的安全模块的经验。
当然,在会议上不仅介绍了软件分析工具,还介绍了其他工具,借助这些工具,可以提高软件的可靠性。 聆听
Dmitry Dagaev的报告 “可伸缩的Oberon技术作为保护关键系统安全软件的手段”非常有趣。 该报告的作者是用于核电站的SCADA QMS的首席设计师。 因此,具有“功能安全性和抵御网络威胁的保护方面的要求越来越高”的系统的第一手经验(引自注解至他的报告)。 为了提高软件安全性,作者建议使用
Oberon技术。 Oberon语言的作者
Nikolaus Wirth提出了引入限制的想法,这大大降低了编写不安全软件的风险。 同时,在改进编译器的帮助下,该报告的作者建议创建针对各种任务和平台的映像。 该报告离我很近,因为
Embox提出了类似的局限性想法。 但是他们建议使用
模块描述语言 (针对特定任务的自己组成的声明性语言)引入限制。 我们认为,要生成允许您为特定任务创建图像的工件,使用单独的语言来描述这些工件也更加容易。
结果,会议组织者在一节中总结了有关安全软件的各种方法的报告,主要是功能安全方面的报告。 第一种方法是使用工具进行代码分析,第二种方法是使用更高级别的语言,最后使用卡巴斯基实验室的方法,这是组织上或方法上的方法。 也有关于调试器的报告,但我最好将其放在单独的部分中,尽管当然,调试可以减少错误数量,因此也可以提高软件的可靠性。
调试工具
会议介绍了几种用于调试和分析系统软件的工具。
NTP“ Cryptosoft”公司(
QP OS的创建者)的
Valery Egorov谈到了PathFinder调试器,该调试器用于QP VMM虚拟机管理程序中。 自然地,所有这些都有其自身的优点和缺点。
Virtuozzo高级系统架构师
Denis Silakov他谈到了基于ABRT(自动错误报告工具)查找错误的经验。 建立所有便于分析的日志,在紧急情况下向服务器发送报告,并在服务器上进行进一步分析。
NIISI RAS的
Fedor Chemerev谈到了Baget系列RV操作系统中的跟踪设施。 由于Baget RTOS专注于嵌入式系统,因此在Virtuozzo的情况下,信息也会在仪器计算机上收集,并在服务器上进行分析。 通过写入事件日志来收集信息,而无需紧急情况就可以分析日志。
模块化方法
关于提升软件模块化和模块化好处的工具的第一个讨论是已经提到的
关于Oberon技术的讨论 。
此外,还有三份报告,每份报告都针对确保模块性的问题提出了自己的方法。 Eremeks LLC的
Dmitry Alekseev提出了报告“在C / C ++上面向组件的软件中的依赖注入”。 在其中,作者谈到了切换FX-RTOS OS内核的各个模块以及各种接口的配置。 一个基于宏的项目已经实施。 在
有关Habr的
文章中阅读更多
内容 。
作为Embox项目的参与者,我本人
Anton Bondarev提交了一份报告“开发和使用基于专门编程语言的汇编系统的经验”,其中我谈到了我们开发Mybuild语言的经验,该经验部分地
写在了集线器上 。 在我们的案例中,依赖关系的模块化和实现是使用单独的文件提供的,这些文件以声明性语言描述模块。
第三个是来自ISP RAS的
Mullachiev Kurbanmagomom的
报告, “关于在嵌入式操作系统中使用模块化方法”。 该工具已在另一个JetOS操作系统中使用。 对于模块的描述,使用YAML语言。 不幸的是,没有给出示例,但是这个想法非常有趣,我们正在项目中考虑它。 这个想法是导出(声明)一个接口,并且可以通过该接口连接对象。 有人提出了作者重新发明
IDL的想法。 但这肯定不是事实,只是一些想法。
有关模块化或组件方法的大量报告可能表明了组件模型对于创建可靠软件的重要性。 毕竟,没有人怀疑模块化方法可以降低软件的复杂性,从而降低其可靠性。 该软件的正确结构(体系结构)给出了惊人的结果; 正确的API(本质上是软件合同)使软件受到更多支持。 但是说起来比起实现它,您需要做一个正确的接口要容易得多。 例如,有关Oberon的报告建议使用无状态模块。 自然地,这解决了问题,但是我个人从未见过没有状态的真实系统。
回到有关过时的C的讨论
使用C语言的问题很明显,因此,使用了各种解决方法,包括静态分析器,各种类型的测试等等。 一个合理的问题出现了:为什么要花那么多力气?
由于讨论是开放的,并且为每个人提供了麦克风,因此很明显,一些会议参与者完全支持这一想法,并且一些人对C语言是否成为过去已经成为现实,至少在不久的将来在系统编程领域表示了各种怀疑。
首先,我将提供支持该想法的参与者的观点。 显然,这个想法得到了关于Oberon的报告的作者Dmitry Dagaev的支持。 作为一个论点,他引用了一张照片,在与Nikolaus Wirth的图片中,他拿着一张海报,上面刻着您只需要在Oberon上教编程的题词。 讨论中的其他参与者提出了这样的论点,即
冯·诺依曼架构有些过时了,至少您可以像Elbrus架构那样使用标记的内存。 这不是关于Elbrus架构,而是关于ARM架构的现代趋势,已经提到的Alexander Popov表示了这一点。 自然地,马上就有想要编写OS的人,其某些功能将在硬件中实现。 自然而然地,整个系列的参与者提出了使用另一种语言的主题,建议使用功能性编程语言。 通过开发该语言的主题,我们得出的结论是,在我国,没有经过认证的开发工具,例如,ARM的编译器,被允许使用的编译器可能包含书签。 因此,很明显,您必须首先创建一个编译器,然后才基于该编译器编写软件,包括操作系统。
讨论的第二部分参与者的论点并不太支持使用C语言,而是解释了为什么该语言仍然是创建OS内核的标准。 这样的论点听起来很合理。 C语言的语法意味着程序员对程序中的所有内容(包括内存分配)进行完全和显式的控制,这使您可以创建非常节省资源的算法。 实际上,开发工具(例如gcc)支持C语言。 该语言的语法非常简单,很多人都熟悉。
我真的很喜欢这个寓言与飞船和古老的道路。 从此开始,现在使用的是普通汽车,它们可能不是很好,污染了环境并且事故率很高。 但是,为了改用一些无人驾驶的超级跑车,您可能需要成长为他们,建立质量适当的道路网络,加油,开发算法等。 这些领域的工作正在进行中,但是像这样的老旧汽车的取缔和禁制不太可能成功。
我完全同意,您首先需要开发行业和培训专家,这是一个非常漫长的过程,现在您必须使用一堆已经用C语言开发的软件,因为它比新创建的软件更可靠和调试得多,尽管具有先进的技术。 确实,尽管没有进行讨论,但在会议上却发出了这样的警告。 例如,关于密码软件托管的报告的作者Dmitry Belyavsky在被问及安全开发人员需要知道什么时回答说:“切勿自己编写密码。” FSTEC的Dmitry Shevtsov要求我更多地支持开发的软件。
关于培训专家,这可能是最重要的问题:专家会“思考”什么?将在此基础上开发软件,因为C语言具有UNIX和Minix,所以很有可能成为OS的事实上的标准(也许这就是为什么)是针对UNIX开发而设计的。 因此,用于教育学童和学生使用Oberon
Informatics 21语言进行编程的项目可以取得成果,但是必须花费很多时间。
结论
正如我在导言中所说,这次会议使您可以共享想法,进行讨论和讨论。 在许多问题上提出了几种方法,例如关于模块化软件和安全软件。 此外,会议的组织者有意识地以不同的方式呼叫发言人,这使会议更加有趣。 当然,正如Dmitry Zavalishin在讨论C语言时所说的那样,会议是非常开放的,“所有人的五分钟荣耀”。
聚苯乙烯
我刚刚
在中心上阅读
了一篇名为“技术媒体作为集市”的文章 。 它说明了拥有几种不同意见的重要性。 我建议继续在Habré上讨论C语言。 例如,知道是否有跨平台的工业解决方案可以防锈或防锈很有趣。