Skip to content

Commit c8192ea

Browse files
author
Mingshen Sun
committed
readme: add Chinese
1 parent 75d2142 commit c8192ea

File tree

2 files changed

+138
-0
lines changed

2 files changed

+138
-0
lines changed

README.cn.md

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
<p align="center"><img src="img/logo.png" height="86" /></p>
2+
3+
# MesaPy: 一个安全且快速的 Python
4+
5+
[![Build Status](https://ci.mesalock-linux.org/api/badges/mesalock-linux/mesapy/status.svg)](https://ci.mesalock-linux.org/mesalock-linux/mesapy)
6+
7+
[English](README.md) | 中文
8+
9+
Python 是现代大数据/机器学习的重要基础,但是 Python 包含超过 30 万行 C 代码,含
10+
有很多安全漏洞和隐患,在高安全高可靠性场景下面临着严重的安全威胁。MesaPy 是一个
11+
**内存安全**的 Python 实现,基于 PyPy 并继承了 PyPy 显著的特点:卓越的运行速度
12+
(得益于 JIT 编译器)、高效的内存使用率、良好的兼容性、以及强大的并发处理(支持
13+
stackless 协程)。除此之外,MesaPy 专注于安全,通过 **1. 使用内存安全语言重写外
14+
部库****2. 加强 RPython 类型系统保障内存安全****3. 形式化验证保障内部 C 代码
15+
的内存安全**等方法,全面提升 Python 解释器的安全性,避免内存问题引发的高危安全漏
16+
洞。基于这些安全特性,MesaPy 也支持**运行在 Intel SGX 中**,开发者可以使用
17+
Python 轻松地开发 SGX 应用,运行于可信运行环境中。
18+
19+
## MesaPy 四大安全特性
20+
21+
MesaPy 拥有**内存安全****安全增强****形式化验证****SGX 支持**四大安全特性,
22+
以下是详细介绍:
23+
24+
- **内存安全**: 因为 MesaPy 基于由 RPython 实现的 PyPy,相比 CPython,多数内置
25+
的 Python 库都具有相对安全的运行时。但是 PyPy 仍然依赖由非内存安全的 C 编写的
26+
外部库,这些外部库会引入潜在的内存安全问题。为了解决这些外部依赖中隐藏的内存安
27+
全问题,我们使用内存安全语言 Rust 重写了外部依赖库。同时,我们努力兼容原有的
28+
API,确保开发者无需修改或少量修改,就可以无缝的享受 Rust 带来的内存安全保证。
29+
- **安全增强**:MesaPy 解释器由 RPython 语言实现,RPython 与 Python 语法类似,但
30+
是为强类型语言(通过 RPython 翻译器翻译为后端中间代码后编译执行)。其中
31+
RPython 的 list 类型没有运行时数组越界的检查,这会导致使用中出现内存问题。我们
32+
通过修改 RPython 的 list 类型,使其可以运行时动态检查数组访问越界,保证数组访
33+
问的内存安全。
34+
- **形式化验证**:MesaPy 项目中的 Python 解释器不可避免的使用了 C 代码,为了保证
35+
这些代码的安全性,我们使用多款形式化验证工具对其进行内存安全属性的验证。其中包
36+
括缓冲区溢出(buffer overflow, buffer over-read),空指针解引用(null pointer
37+
dereference)以及内存泄漏(memory leakage) 问题。现阶段,我们通过使用形式化验
38+
证的方法,验证 RPython 的翻译器本身,JIT 编译器后端,以及 RPython library 中部
39+
分的 C 代码。现在验证还在进行中,感兴趣的朋友可以根据文档尝试验证相关函数,帮
40+
助我们完善 MesaPy 的形式化验证。验证所需的 mock 函数,验证脚本,以及验证初步结
41+
果都已在开源代码中。
42+
- **SGX 支持**:在以上三点安全保证的基础之上,MesaPy 也同样支持 Intel SGX(一个
43+
可信的执行环境)。我们通过对 MesaPy 的精简和对 Python 内置库的改造,使开发者能
44+
够使用 Python 写出运行在 SGX 里的应用。MesaPy 对于 SGX 的支持不仅加速了 SGX 应
45+
用的开发效率,同时也能保证运行在可信执行环境中应用的内存安全。针对 SGX 的支持
46+
还在开发当中,我们已经拥有一个可在 SGX 里执行的 Python 解释器,对于常用库的移
47+
植工作仍在进行,敬请期待后续更新。
48+
49+
MesaPy 项目仍在进行中,以上安全特性正在不断优化,代码都已开源在 GiHub,我们希望
50+
与开源社区共同构建 MesaPy 的未来。对于 MesaPy 更多的介绍,包括功能、路线图、安全
51+
特性的详细介绍等相见:
52+
53+
- GitHub 开源项目地址:https://github.com/mesalock-linux/mesapy
54+
- 官方文档:https://docs.mesapy.org
55+
56+
## 系统架构
57+
58+
MesaPy 增强了 PyPy 的安全性,相比 CPython(也就是我们经常提到的 Python),整体安
59+
全性有了本质的提升,MesaPy 的系统架构可以通过下面这张图概括。图中描述了如何构建
60+
一个面向内存安全的 Python 实现,红色部分表示非内存安全模块,蓝色部分表示内存安全
61+
模块。MesaPy 通过多种方式完善 Python 中非内存安全的部分。
62+
63+
<p align="center">
64+
<img src="img/design.png" width="600"/>
65+
</p>
66+
67+
首先,CPython 的主要模块 Python 解释器和 Python Modules 都是由非内存安全代码 C
68+
编写(大约有 30 万行代码),如此庞大的代码量非常容易引入内存安全漏洞。可以查看
69+
CPython 相关的安全漏洞,大部分都是由缓冲区溢出这类内存安全问题造成的(参考链接:
70+
https://www.cvedetails.com/vulnerability-list/vendor_id-10210/product_id-18230/Python-Python.html
71+
)。
72+
73+
其次,PyPy 使用 RPython 重写了 Python 解释器和库,这大大缓解了 CPython 带来的内
74+
存安全问题。但是,PyPy 仍存在三个存在内存安全问题的薄弱点:1. 部分的 RPython 翻
75+
译器,JIT 编译器库是由 C 编写(大约一千行);2. RPython 的 list 类型没有运行时数
76+
组越界检查(参考链接:
77+
https://rpython.readthedocs.io/en/latest/rpython.html#exception-rules);3. 部分
78+
RPython 提供给 PyPy 使用的第三方库是有 C 编写的。
79+
80+
MesaPy 通过形式化验证、RPython 类型安全增强、使用内存安全语言重写非安全库等方式
81+
弥补了 PyPy 潜在的安全问题,努力提供完整的内存安全保证。
82+
83+
## 性能测试
84+
85+
我们选取了 19 个 Python 的性能测试点针对 MesaPy、PyPy 和 Python 2.7 分别进行测试,
86+
其性能测试结果如图。横轴表示 19 个性能测试点的测试脚本名称,纵轴表示测试点运行时
87+
间相比 baseline (Python 2.7.12) 性能的 speedup(取运行 10 次的平均值,对数坐标系,
88+
测试机器为 Intel Core i7-8086K CPU, 32G RAM),蓝色为 MesaPy 的测试结果,黑色为
89+
PyPy 的测试结果。
90+
91+
<p align="center">
92+
<img src="img/benchmarks.png" width="600"/>
93+
</p>
94+
95+
如上图展示,MesaPy 与 PyPy 的性能相当,相比 Python 2.7 有大幅度的提升。**多数测
96+
试结果都有 10x 左右的性能提升**,在某些测试点中(比如 `gcbench.py`
97+
`spectral_norm`)会有 30x 的性能提升。如此显著的性能提升得益于 JIT 编译器以及高
98+
效的内存垃圾回收机制。
99+
100+
用于性能测试的测试脚本已经开源在 GitHub:
101+
https://github.com/mesalock-linux/mesapy-benchmarks,更多更详细的性能对比数据也
102+
可以参考 PyPy Speed Center: http://speed.pypy.org/
103+
104+
## 如何使用 MesaPy
105+
106+
MesaPy 可以在多种场景下使用,如运行大数据计算、训练机器学习模型等。我们提供多种渠道下载使用 MesaPy:
107+
108+
1. 下载预编译的 MesaPy 包使用 MesaPy
109+
2. 使用 Docker 体验 MesaPy
110+
3. 从源代码编译 MesaPy
111+
112+
MesaPy 在 GitHub 的 README 上提供了详细编译步骤,详见:https://github.com/mesalock-linux/mesapy
113+
114+
## 加入 MesaPy 项目
115+
116+
MesaPy 项目及其子项目选择使用 BSD 开源协议下开源。BSD 开源协议是一个给于使用者很
117+
大自由的协议,我们希望有更多的人来使用 MesaPy,提升 Python 语言生态的安全。同时,
118+
安全生态的可持续发展也离不开开源社区、工业界、学术界的共同参与,我们非常欢迎大家
119+
的贡献和支持。支持 MesaPy 的途径有很多,例如:
120+
121+
- 尝试使用 MesaPy,给我们反馈使用感受和改进的建议等
122+
- 参与贡献 MesaPy 的开发流程、完善文档、帮助解答常见问题等
123+
- MesaPy 对于第三方库的支持的工作还在进行中,我们希望社区的支持,尝试把内存安全
124+
语言编写的第三方库移植到 MesaPy 中
125+
- MesaPy 的形式化验证工作仍在进行中,我们开源了验证手段和现阶段结果,希望社区可
126+
以参与进来,与我们一起使用形式化验证方法和工具验证 MesaPy 中的“非安全”组件
127+
- 帮助提高 MesaPy 对于 SGX 的支持,比如把 normal world 中常用库移植到 SGX 中
128+
129+
如果你对于 MesaPy 感兴趣,我们提供了详细的文档帮助你了解 MesaPy 的设计和代码结构。
130+
同时也可以参与社区讨论,通过提交 issue,pull request 等方式和我们交流。
131+
132+
**参考链接:**
133+
134+
- MesaPy: https://github.com/mesalock-linux/mesapy
135+
- PyPy Speed Center: http://speed.pypy.org/
136+
- RPython Language (Exception rules): https://rpython.readthedocs.io/en/latest/rpython.html#exception-rules

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
[![Build Status](https://ci.mesalock-linux.org/api/badges/mesalock-linux/mesapy/status.svg)](https://ci.mesalock-linux.org/mesalock-linux/mesapy)
66

7+
English | [中文](README.cn.md)
8+
79
MesaPy is a *memory-safe* Python implementation based on PyPy. In addition to
810
PyPy's distinct features -- speed (thanks to the JIT compiler), memory usage,
911
compatibility and stackless (massive concurrency), MesaPy mainly focuses on

0 commit comments

Comments
 (0)