与其他操作系统相比,Redox如何
我们与其他操作系统有很多共同之处。
由于
Redox syscall接口是Unix-y。例如,我们有open, pipe, pipe2, lseek, read, write, brk, execv等等。目前,我们支持31个最常见的Linux系统。
与Linux相比,我们的syscall接口要小得多。这并不是因为开发阶段,而是因为极简设计。
“一切都是URL”
这是“一切都是文件”的概括,主要是受到了计划9的启发。在Redox中,“resources”(TODO: link)既可以是类似于套接字的,也可以是类似于文件的,这使得它们可以快速地用于几乎所有的事情。
这样,我们就得到了一个更加统一的系统API。稍后,我们将在url、模式和资源中对此进行解释。
内核
Redox的核是一个微核。该设计的灵感主要来自MINIX。
与Linux或BSD相比,Redox只有16000行内核代码,这个数字还在不断减少。大多数服务都是在用户空间中提供的。
在内核中使用更少的代码可以更有效地查找和修复bug /安全问题。Andrew Tanenbaum (MINIX的作者)指出,每1000行正确编写的代码中就有一个bug。这意味着对于一个包含近25,000,000行代码的单片内核来说,可能有近25,000个bug。一个只有16000行代码的微内核意味着大约有16个bug。
应该注意的是,额外的行只是基于内核空间之外,这使它们不那么危险,而不一定是更小的数字。
其主要思想是让组件和驱动程序存在于用户空间中,并且遵循最小权限原则(POLA)。这是每一个单独的组成部分:
完全隔离在内存中,并作为一个独立的用户进程
一个组件的失败不会使其他组件崩溃
外部和不受信任的代码不会公开整个系统
错误和恶意软件不能传播到其他组件
是否限制了与其他组件的通信
没有管理/超级用户权限
bug被转移到用户空间,降低了它们的能力
所有这些都大大提高了系统的可靠性。这对于任务关键型应用程序和希望减少计算机系统问题的用户非常有用。

为什么Rust呢?
为什么要在Rust中编写操作系统?为什么还要用Rust?
Rust拥有巨大的优势,因为对于操作系统来说,安全性非常重要。实际上,很多。
由于操作系统是计算的一个集成部分,所以它们是一个非常重要的安全组件。
由于缺乏内存和类型安全,Linux、BSD、Glibc、Bash、X等系统一直存在大量bug和漏洞。Rust通过静态地加强内存安全性,做到了这一点。
设计很重要,实现也很重要。Rust试图避免这些意外的内存不安全情况(这是安全性关键bug的主要来源)。设计是一个非常透明的问题来源。你知道发生了什么,你知道什么是计划好的,什么不是。
在这一点上,内核/用户空间分离的基本设计与类unix系统非常相似。其思想大致相同:通过内核的严格执行,将内核和用户空间分离,内核负责管理内存和其他关键资源。
然而,我们有一个优势:强制的内存和类型安全。这是Rust的强大之处——在编译时消除了大量“未预料到的bug”(例如,未定义的行为)。
Linux和BSD的设计是安全的。执行情况不是:
Linux内核漏洞
Glibc漏洞
Bash的漏洞
X漏洞
点击上面的链接。您可能会注意到,许多bug都是在不安全的条件下产生的(这些条件可以有效地消除锈蚀),比如缓冲区溢出,而不是整体设计。
我们希望使用Rust最终能够生成更安全的操作系统。
不安全的
不安全是告诉Rust“我知道我在做什么!”的一种方式,这在编写低级代码、提供安全的抽象时通常是必要的。如果没有unsafes,就不能编写内核。
在这种情况下,内核不可能是100%安全的,但是不安全的部分必须标记为不安全的部分,这将不安全的部分与安全代码隔离开来。我们尽量消除不安全的地方,当我们使用不安全的时候,我们是非常小心的。
快速的grep给出了一些统计数据:在大约16000行代码中,内核大约有300次不安全调用。每一个都经过仔细审核以确保正确性。
这与用C语言编写的内核形成了对比,C语言如果没有代价高昂的正式分析,就不能保证安全性。
你可以在Rust书的相关章节找到更多关于如何不安全的工作。

Redox是一个完整的Rust操作系统。除了内核,我们还在开发几个小项目,包括:
TFS:受ZFS启发的文件系统。
Ion: Redox shell。
Orbital: Redox 显示服务器。
OrbTK:小部件工具包。
pkgutils: Redox的包管理库及其命令行前端。
Sodium:类似于vi的编辑器。
ralloc: 一个内存分配器。
libextra: libstd的补充,在整个Redox代码库中使用。
games-for-redox: Redox (类似于bsd游戏)的迷你游戏集。
以及其他一些令人兴奋的项目。
我们还有三个实用程序发行版,它们是一些小的、有用的命令行程序的集合:
Coreutils:一个可用系统所必需的最小实用程序集。
Extrautils: 如提醒、日历、拼写检查等。
Binutils:处理二进制文件的实用程序。
我们也积极参与第三方项目,这些项目在Redox中被大量使用。
uutils/coreutils: GNU coreutils的跨平台锈蚀重写。
m-labs/smoltcp: Redox使用的网络堆栈。
什么工具适合Redox?
将来,这些工具中的一些将被移出默认的发行版,放到单独的可选包中。例如,Orbital, OrbTK, Sodium等等。
列出的工具可分为三类:
关键的,这是一个完整的功能和可用的系统所需要的。
生态友好型,是为了在生态系统中建立一致性。
乐趣,这是“美好的”,并天生简单。
第一类是显而易见的:没有某些核心工具的操作系统是无用的操作系统。第二类包含了将来可能不会违约的工具,但由于其魅力,现在仍然是官方发布的。第三类是为了方便:即确保Redox基础结构是一致和集成的(例如,pkgutils、OrbTK和libextra)。

Redox随笔(2)-用Rust语言编写的类UNIX操作系统相关推荐

  1. Redox随笔(1)-用Rust语言编写的类UNIX操作系统

    Redox是一个用Rust语言编写的类UNIX操作系统 , 它的目标是把Rust语言的创新带入到一个现代的微内核和全系列的应用程序. https://www.redox-os.org/zh/docs/ ...

  2. Bitcoin.com开发人员正创建一个用Rust语言编写的BCH全节点

    近日,Bitcoin.com开发人员Gabriel Cardona在推特表示,自己正创建一个用Rust语言编写的BCH全节点,目的是为了改变完整节点的范式,让BCH代码库更加安全.编程人员技术贡献更加 ...

  3. 【Rust日报】2021-10-05 Mimic: 一款用Rust语言编写的命令行Gameboy模拟器

    Mimic: 一款用Rust语言编写的命令行Gameboy模拟器 Mimic: A Gameboy emulator written in Rust that can be played on the ...

  4. 2022-07-25:xiu是用rust语言编写的流媒体服务器软件项目。k8s安装xiu,drone文件如何写?

    2022-07-25:xiu是用rust语言编写的流媒体服务器软件项目.k8s安装xiu,drone文件如何写? 答案2022-07-25: 云原生环境不可能完全一样,只能做参考. 我采用的是dron ...

  5. jdbc是java语言编写的类和接口_JDBC——Java语言连接数据库的标准

    JDBC概述 API JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...

  6. ASP.NET的App_Code中放置不同语言编写的类

    ASP.NET程序的App_Code文件夹下放置的类可被自动编译成一个程序集,页面中所有使用该程序集中的类和方法都会自动调用并更新,维护起来极为方便.但是,该文件夹下的类只能用一种语言编写,Visua ...

  7. dll文件用什么语言编写_为什么Unix不用功能更强大的C++而是用C编写

    有人总会说C++不是要比C的作用大很多,功能也更多.那为什么Unix不用功能更强大的C++而是用C编写?关于Unix为什么用C而不是C ++编写的显而易见的答案是C ++是在C之后诞生的.另一个原因是 ...

  8. rust语言编写wasm简单例子

    rust的wasm使用wasm-pack来build,有很多选项和target用于不同的目的,本文描述一个最简单的示例,不使用webpack和npm,让你可以快速入门和了解. 全局安装 wasm-pa ...

  9. 选择 Go 还是 Rust?CloudWeGo-Volo 基于 Rust 语言的探索实践

    本文整理自 CloudWeGo 开源一周年技术沙龙活动中字节跳动基础架构服务框架资深研发工程师吴迪的演讲分享,技术沙龙主题为<字节高性能开源微服务框架:CloudWeGo>. 本文将从以下 ...

最新文章

  1. git是航空母舰:ScrumBoard
  2. windows与虚拟机的linux共享一个文件夹
  3. jwt-cli:一个用于解码JSON Web令牌(JWT令牌)的Shell库
  4. 连接oracle配置文件参数,Hibernate3 +Oracle10g 集群,hibernate配置文件中如何编写连接参数...
  5. 计算机专业综合改革举措,计算机专业教学改革
  6. XE Styles不见了
  7. EasyUI基础入门之Parser(解析器)
  8. 如何彻底关闭windows10自动更新
  9. 【手势识别】基于matlab GUI SIFT+SVM算法手势识别【含Matlab源码 1789期】
  10. 深度学习:语义分割网络U-Net
  11. 移远ec20 openLinux交叉编译python
  12. Linux环境安装ghostscript-9.25
  13. 数仓建模—建模工具PDMan(CHINER) 入门介绍
  14. 计算机类课题研究方法,课题研究方法有哪些
  15. 关于echarts中饼图设置颜色的方法
  16. Linux 一条命令删除某端口被占用的进程
  17. java学习第七周总结
  18. 金山词霸2009牛津版下载地址
  19. 企业端点网络安全行业调研报告 - 市场现状分析与发展前景预测
  20. 10.3、DHCPv6原理与配置

热门文章

  1. 高级特性(1)-切片
  2. 新玩法,CentOS7中LVM通过扩展逻辑卷扩展swap空间
  3. asp.net等项目编译失败的原因之不能写入
  4. 大牛的距离(笑cry)精简算法
  5. 单交换机VLAN虚拟局域网划分
  6. T-SQL管理数据库对象
  7. nginx 中location中root和alias的区别
  8. linux命令 - free -m
  9. 宿舍助手app——个人工作第四天
  10. Linux安装技巧--安装Uuntu与windows8/10共存