先看这个 Demo
我创建了一个叫 app.icm 的文件,内容如下:
ini
PRINT Hello from ICM format
PRINT 2+2=4
.icm 不是任何已存在的编程语言,我刚刚发明的。然后我输入:
shell
icm> run /data/app.icm
系统输出:
csharp
[SANDBOX] AI:检测到自定义 DSL,PRINT 语句映射为 Python print(),转换中...
Hello from ICM format
2+2=4
没有预置解析器,没有提前写好的解释器。AI 读取了文件内容,理解了语义,转换成 Python 代码后执行。
这是什么
ICM-OS(Intent-Centric Meta Operating System),一个意图驱动的元操作系统研究原型。
核心理念只有一句话:
用户不需要安装任何软件,只需表达意图,系统自动执行。
你说"把这段话翻译成日文",系统就翻译。你说"运行这个文件",系统就运行------不管它是什么格式。你说"计算 hello 的 SHA256",系统就实时生成一个 SHA256 原语并执行。
技术架构
ICM-OS 是一个真实可启动的操作系统,不是 Docker 容器,不是套了壳的 Python 脚本:
- 内核:Linux 6.1.82(最小化配置)
- 引导:GRUB2
- 网卡驱动:Intel e1000
- Init 进程:自己写的 C 程序(PID 1)
- Shell:自然语言驱动,替代 bash
第一层:CDM(能力分解模型)
用户输入意图 → AMS(意图分解器)调用 DeepSeek API → 分解为有向无环图(DAG)→ 按拓扑顺序执行。
arduino
"抓取 https://example.com 并总结内容"
→ DNS_RESOLVE
→ TCP_CONNECT
→ TLS_HANDSHAKE
→ HTTP_GET
→ HTML_PARSE
→ NLP_SUMMARIZE
每个节点是一个实现了 invoke() 接口的 Python 类,前一个节点的输出作为下一个节点的输入。图在执行前会经过类型检查、无环性验证和访问控制验证。
第二层:DynGen(动态原语生成)
如果注册表里没有合适的原语,系统会:
- 让 DeepSeek 生成对应的 Python 类代码
exec()动态加载到运行时- 注册到 CPR(能力原语注册表)
- 缓存到
/data/primitives/目录
下次重启时自动从磁盘恢复,零 API 调用。
javascript
icm> calculate the SHA256 hash of "hello world"
[DynGen] Generating primitive: SHA256_HASH
[DynGen] Generated:
import hashlib
class SHA256_HASHPrimitive(CapabilityPrimitive): ...
[DynGen] Cached: /data/primitives/SHA256_HASH.py
Result: b94d27b9934d3e08...
第三层:SANDBOX_EXEC(任意格式执行)
这是"运行任何文件"功能的核心:
- 读取文件内容
- 如果是
.py/.sh,直接运行 - 如果是未知格式:让 AI 分析内容,判断语言/格式,必要时转换后运行
.icm 格式就是这样被执行的。
真实运行效果
真实 DNS 解析 + HTTP 请求:
ini
icm> fetch https://httpbin.org/ip
[DNS_RESOLVE] ip='34.235.67.238' ← 真实 DNS 解析
[TCP_CONNECT] status=CONNECTED
[TLS_HANDSHAKE] cert_valid=True
[HTTP_GET] status_code=200
Result: {"origin": "38.150.15.31"} ← 真实公网出口 IP
任意语言写文件(无需任何配置):
shell
# 中文
icm> 把"你好世界"写入文件 /data/notes/test.txt
→ 写入成功 ✓
# 德文
icm> Schreibe "Hallo Welt" in die Datei /data/notes/german.txt
→ 写入成功 ✓
# 日文翻译
icm> 把 你好 翻译成日文
→ こんにちは ✓
AMS 直接从意图中提取参数,不管用什么语言输入,DeepSeek 负责理解。
网页抓取 + AI 总结:
ini
icm> 抓取 https://example.com 并总结内容
[HTML_PARSE] title='Example Domain'
[NLP_SUMMARIZE] 此域名仅用于文档示例,无需授权,请勿用于实际操作。
读取真实内核数据:
sql
icm> show current memory usage
MemTotal: 1023272 kB MemFree: 841840 kB ← 来自 /proc/meminfo
动态原语缓存演示:
yaml
# 第一次启动:AI 生成
[DynGen] Generating primitive: UUID_GENERATE
[DynGen] Cached: /data/primitives/UUID_GENERATE.py
Result: bc05d63e-718c-4ea6-804c-a1eeef3b83d1
# 重启后:从缓存加载,零 API 消耗
[DynGen] Loaded from cache: UUID_GENERATE
Result: 5d604c9e-eafb-4ae1-beb4-6a7e36bd31d8
启动方式
bash
qemu-system-x86_64 \
-kernel iso-build/work/iso/boot/vmlinuz \
-initrd iso-build/work/initrd.img \
-append "console=ttyS0,115200n8 rdinit=/init" \
-m 1024M -nographic \
-netdev user,id=net0 -device e1000,netdev=net0
启动时会自动:
- 挂载 proc/sys/devtmpfs/tmpfs
- 从 initramfs 恢复缓存原语到
/data/primitives/ - 配置 eth0 网络(IP、网关、DNS)
- 启动 Python ICM shell
尚未完成的部分(老实说)
- 动态生成代码无沙箱 :
exec()AI 生成的代码在生产环境显然不安全,这是目前最关键的问题 - 渲染原语是 stub:CSS_LAYOUT、JS_EXECUTE、WINDOW_RENDER 还没实现
- 持久化磁盘:tmpfs 重启后清空,目前通过把缓存原语打包进 initramfs 绕过
- GBT 验证器是 stub:ARM64→x86-64 翻译功能基本可用,但行为等价验证还没做
- Kconfig 的坑 :Linux
make oldconfig会静默丢掉没有满足依赖的配置项,CONFIG_E1000=y莫名消失的问题排查了很久
为什么做这个
现有操作系统的交互模型:
用户意图 → 找软件 → 安装 → 学习 → 操作 → 结果
中间有太多不必要的摩擦。ICM-OS 想把这个链路压缩成:
用户意图 → 结果
不是新想法,但我想做一个真正可以启动、真正跑实际工作负载的原型,而不是 PPT 或 Demo 视频。
当前进度
| 里程碑 | 状态 | 内容 |
|---|---|---|
| M1 | ✅ | 可启动 ISO + CDM + 网络 |
| M2 | ✅ | 真实 DNS / HTTP / 翻译 |
| M3 | ✅ | 文件读写 / HTML 解析 / AI 总结 |
| M4 | ✅ | 动态原语生成,系统自我扩展 |
| M5 | ✅ | SANDBOX_EXEC,任意格式文件执行 |
| M6 | 🔄 | 原语安全沙箱 + 依赖自动安装 |
快速体验
bash
git clone https://github.com/jinbohao1688/icm-os.git
cd icm-os
echo "DEEPSEEK_API_KEY=your_key" > .env
pip install -r requirements.txt
python3 cli.py # 开发模式,不需要编译内核
完整 ISO 构建见 README。
GitHub :github.com/jinbohao168...
论文 (CDM/GBT 理论):jinac.vxni.ink
欢迎讨论架构设计、安全边界,或者告诉我这个方向有什么根本性的问题。
技术栈:Python 3.10 / Linux 6.1.82 / DeepSeek API / networkx / BeautifulSoup / 自制 C init