1、Fuchsia 设计解读重德智能 多年的 Android,ChromeOS 开发经验一方面让 Google 在操作系统方面积累了足够多的人才和组件,另一方面也充分认识到了 Linux kernel 很多的局限性 Fuchsia 是一个全新的操作系统的统称。Google 挑选了一系列它认为合适的技术和组件进入这个操作系统,比如:微内核,基于能力的访问控制,Vulkan 图形接口,3D 桌面渲染 Scenic,Flutter 应用开发框架。目前支持的编程语言是:C/C+,Go,Rust,Dart Google 2016 年中放出了所有的代码,但是没有正式宣布这个项目的目标,开发社区目前有一个 IR
2、C 频道进行交流 支持的架构是 X86-64 和 ARM 64,支持的设备从 IoT 到服务器Fuchsia 的基本情况为什么不在 Android 上改进,塞入各种新技术https:/spectrum.ieee.org/aerospace/aviation/how-the-boeing-737-max-disaster-looks-to-a-software-developer 737 的问题:机翼下空间太小,放不下大引擎。改动机翼相当于重新设计一架飞机 所以,改变发动机位置强行放进去,后果是改变了空气动力学特性,机头容易上扬 解决方案是通过修改飞控软件来弥补,飞控认为飞机在上扬,强行下压,造
3、成失控 当总体设计出现问题的时候,用再多的技巧去弥补,也只会造成最终的灾难Google 为什么要从头设计全新的操作系统 上游硬件厂商 下游应用开发者 设备友商 用户 黑客现代通用、开放 OS 需要面对的方面 原生进程沙箱,解决应用安全和分发问题(黑客)Linux:Namespace,Control group,Unionfs=Docker 稳定的驱动接口,硬件厂商可独立维护硬件驱动(硬件)系统模块化,分层,设备厂商可以灵活定制专有系统(友商)基于 Vulkan 和物理渲染的纯 3D UI,全局光照(用户)Flutter 应用开发框架(开发者)Fuchsia 解决现代 OS 痛点 全局文件系统
4、用户 进程的创建 系统调用Fuchsia 重新思考四个 Unix 的基础抽象机制 在 Unix 里,存在一个全局的根文件系统 它是每个进程共享的基础资源 文件系统涵盖了非文件资源:/proc,/sys,网络是例外 在 Fuchsia 里,没有全局根文件系统 文件和文件系统成为一个局部概念(局限在每个文件系统进程里),从而在进程内核数据结构里没有 file 用 namespace 来定义一个进程能够访问的资源每个 name(路径)对应一个资源进程 channel 的 handle“/“-root vfs service handle,“/dev”-dev fs service handle,“/
5、net/dns”-DNS service handle全局文件系统 在 Unix 中,User 本来是用作不同的用户登录共享服务器的机制 User 是真正的用户 后来主要用作权限控制,弱化的沙箱机制 在 Fuchsia 中,在底层(Zircon,Garnet)没有用户的概念 用 namespace 来控制进程能够访问的资源 Capability-based access control 从而在进程里没有 uidUser 在 Unix 中,新的进程由老的进程 fork 而来 新的进程继承父进程的全部资源 一种偷懒的设计 Andrew Baumann,A fork()in the road,ACM
6、 Hot Topics in OS,May 2019 在 Fuchsia 中,新进程的创建需要从头开始 创建 process,thread 父进程建立初始的 namespace 到资源 channel handle 的映射 调用 process_start 显式地告诉内核新的进程可以跑了 在 Fuchsia 内核的 process 数据结构里,没有 file 和 uid进程的创建Unix/Linux 里,通过中断调用内核服务:int 0 x80,syscall,sysenter 系统调用的方式是确定的,直接的内核接口不能变可以被任意注入的代码调用Zircon 里系统调用通过 vDSO 进行,意