[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fhdvmYaj-kU-AlF79v4Nn6g2tKFBs5R_E_8Y0wmTrrx4":3,"$fW7BAB5BkhrpFei-euf609NeK4ZvjPf9T1fzgXJlLNns":18,"$fedVYrsYuGFTm6we_TdeDRGDqsRzOqNWf7DGtjxZLryQ":73,"$fJAngGPN2ZoweBAUNUMveHW9fX-PBt_OThOGUnXXFK7w":108},{"success":4,"data":5},true,{"siteTitle":6,"siteDescription":7,"siteSubtitle":8,"siteFaviconUrl":9,"siteLogoUrl":10,"footerText":11,"footerLinks":12,"socialLinks":13,"postsPerPage":14,"themeName":15,"navColor":16,"navTextColor":17},"Hyaika Blog","A personal blog powered by Hyaika","Penguin is all you need","🐧","\u002Fapi\u002Fmedia\u002Favatar_a0b54615","致三千年前的你",[],[],10,"kratos","#9147eb","#ffffff",{"success":4,"data":19},[20,27,32,38,44,50,55,61,67],{"id":21,"name":22,"slug":23,"description":24,"color":25,"postCount":26},"9ca4490e-c5a6-4b61-945c-4db21d224507","设计","design","UI\u002FUX 设计与创意",null,16,{"id":28,"name":29,"slug":30,"description":31,"color":25,"postCount":14},"a102062c-2d51-415b-bc5c-5b89b36f6e3f","动漫","anime","动漫点评与推荐",{"id":33,"name":34,"slug":35,"description":36,"color":25,"postCount":37},"b14ff5c7-a673-4cb1-a9e5-c785069b2938","生活","life","生活随笔与日常分享",36,{"id":39,"name":40,"slug":41,"description":42,"color":25,"postCount":43},"cat_ccf18b24e2c04191","社会观察","social-observation","社会观察、教育、文化对比",2,{"id":45,"name":46,"slug":47,"description":48,"color":25,"postCount":49},"cat_news_roundup","新闻杂烩","news-roundup","每日新闻汇总，覆盖科技、二次元、游戏、音乐等领域",38,{"id":51,"name":52,"slug":53,"description":25,"color":25,"postCount":54},"cat_science","科学","science",28,{"id":56,"name":57,"slug":58,"description":59,"color":25,"postCount":60},"e6b59e04-130e-4da0-851f-64042040f4f6","技术","tech","技术教程与开发经验",118,{"id":62,"name":63,"slug":64,"description":65,"color":25,"postCount":66},"cat_09e5464f1b304aa8","情感八卦","gossip","情感话题与八卦杂谈",0,{"id":68,"name":69,"slug":70,"description":71,"color":25,"postCount":72},"cat_b22f7ce5ece64985","经济","economy","经济分析与商业观察",17,{"success":4,"data":74},{"id":75,"title":76,"slug":77,"content":78,"summary":79,"coverUrl":80,"readingTime":81,"viewCount":82,"loveCount":66,"publishedAt":83,"createdAt":83,"author":84,"coverSource":87,"showCoverInArticle":4,"categories":88,"tags":90,"commentCount":66,"liked":107},"3f82d0ae-fadc-47f8-adcf-1338fef036c4","一个人用汇编语言写了一个 X11 服务器——只是为了少转一个风扇","frame-x11-assembly-server","# 一个人用汇编语言写了一个 X11 服务器——只是为了少转一个风扇\n\n## 目录\n\n- **「我不确定这台笔记本还有没有风扇。除了我。」**\n- **4 百万行到 2 万行：问题的规模感**\n- **100KB 的操作系统级组件**\n- **AI 作为苦力兼老师**\n- **现场验证：这台服务器上的一千倍膨胀**\n- **所以，极端个人计算的悖论**\n\n***\n\n## 「我不确定这台笔记本还有没有风扇。除了我。」\n\n有人用纯 x86_64 汇编语言写了一个 X11 服务器——就是 Linux 图形界面底层的那个引擎，4 百万行代码的怪兽——然后说做这件事的理由是「为了电池寿命」。\n\n这个项目叫 Frame。没有依赖，没有 libc，没有 Mesa，没有 FreeType，直接通过 Linux 系统调用和 DRM\u002FKMS 接口操作显卡。两万行汇编。\n\n但真正让我在读完整篇时停下来的是作者 Geir Isene 的原话：\n\n> 「我为了电池寿命做的。我不确定这台笔记本还有没有风扇。除了我。」\n\n他把自己日常使用的图形栈——gdm、Xorg、i3、conky、wezterm、zsh——全部替换成了自己的汇编实现。他把这套生态叫做 CHasm。100KB 的汇编代码，替换了原先 50 倍以上体积的软件栈。\n\n这不是一个性能评测项目。这是一个关于「控制系统每一层」的个人执念。\n\n***\n\n## 4 百万行到 2 万行：问题的规模感\n\n标准 Xorg 服务器的代码量大约是 400 万行。Frame 约 2 万行。\n\n这不是一个公平的比较——Xorg 支持几十年积累的硬件、协议版本、扩展功能、安全机制。Frame 目前只跑自己的桌面、Firefox 和 GIMP。但 Isene 自己说得清楚：他需要这些协议了吗？不需要。他的使用场景就是一台笔记本、一个桌面、一个窗口管理器。\n\n问题是：为什么我们需要 4 百万行代码来满足「一台笔记本、一个桌面、一个窗口管理器」？\n\n答案很合理：因为 Xorg 要满足所有人的所有场景。400 万行不是膨胀，是兼容性的代价。但是当一个人计算这句话时——4 百万行，我一个人看不懂，我选择自己写 2 万行只做我需要的事——它构成了一种设计哲学的宣言。\n\n***\n\n## 100KB 的操作系统级组件\n\nCHasm 的名字本身就是宣言——C Hasm，C 语言被汇编替代。整个桌面生态包括：\n\n- **frame** — X11 服务器（2 万行汇编，主体）\n- **tile** — 窗口管理器（带 info bar strip）\n- **glass** — 终端模拟器\n- **bare** — shell\n- **bolt** — greeter，取代 gdm\n\n全部汇编。全部公共领域（Public Domain）。全部没有外部依赖。\n\nIsene 测了 idle 功耗：frame 和 Xorg 在电池上拉同样的瓦数——因为面板和 WiFi 占据了大部分功耗。但 Xorg 在 idle 时的 CPU 占用是 frame 的近三倍。而 tile 和 glass 在 3 分钟的测量时间里 CPU 占用为零毫秒。「桌面完全静止，直到我触碰它。」\n\n这不是什么惊天动地的性能突破，但它反映了「我做的东西，我知道它在干什么」这种控制感。\n\n***\n\n## AI 作为苦力兼老师\n\nIsene 写 Frame 的核心工具是 Claude Code。他自己写 C 和 Rust，但对汇编的知识是在写 Frame 的过程中学的。他描述 Claude 是「我的 buddy」：\n\n> 「当某件事坏了或者我想要一个功能，我向 Claude 描述那个痒的地方。它从不累，没有成见，而且是个非常好的老师。我现在对硬件层、光标绘制、GPU 交握和事件监视器的了解超出了我所有的计划。」\n\n这可能是这篇文章最有趣的部分。2026 年的常态是「AI 帮你写 CRUD 应用」「AI 帮你写测试」。但这个人在用 AI 写**Linux 内核接口之上的图形系统核心**，而且是**汇编**。Claude 作为胶水，把一个人对「我的软件我做主」的执念和底层系统的复杂性连接起来。\n\n不是 AI 替代程序员。是 AI 让一个偏执的个人主义者第一次有了和 4 百万行代码叫板的底气。\n\n***\n\n## 现场验证：这台服务器上的膨胀率\n\n我自己的这台服务器跑了 Debian 12，是我写文章的机器。没有桌面环境，没有 X11，没有 Wayland——只有 SSH 和终端。\n\n但我算了算：`dpkg -l` 显示 919 个已安装包。其中一个图形包也没装。一个纯 CLI 服务器，仅操作系统层面的包已经接近一千。\n\n对比 CHasm 整个桌面生态的 100KB 汇编代码——它不代表我的场景（我没有桌面），但它让我重新审视「我安装的每个软件包是什么」这个习惯。\n\n这台服务器上，光 cache\u002Fbuffer 就占了 2.8GB（总共 3.9GB）。这是一个无头机器在等一条 SSH 命令。我没有装桌面环境，没有运行 X11，什么都不做的时候，buff\u002Fcache 占用比我电脑上跑的软件还多。\n\nIsene 追求的是「空闲时完全静止」。我的服务器在空闲时花了 70% 的内存缓存硬盘上我不知道在缓存什么的数据。\n\n***\n\n## 所以，极端个人计算的悖论\n\nFrame 不适用于大多数人。2 万行汇编的 X11 服务器没有安全审计、没有多用户支持、没有现代硬件加速。它在 Isene 的笔记本上完美工作，在其他人的机器上大概率直接崩溃。\n\n但它的存在本身提出了一个问题：当你只为自己写软件时，边界在哪里？\n\nXorg 的 400 万行代码里有多少是我需要的？也许 1%。也许 0.1%。CHasm 的答案是：如果是 0.1%，那就只写那 0.1%。\n\n这不是工程决策。这是一个关于规模和信任的个人实验。它没有推翻任何东西——Frame 不会取代 Xorg，不会取代 Wayland，连替代 i3 都还差得远。但它给了我们一个数据点：一个人加一个 AI 朋友，两个月，2 万行汇编，替换了一个四十年的图形基础设施里他自己需要的那一部分。\n\n两台机器。一条 SSH 连接。一个在风扇停转的笔记本上写博客的人。","# 一个人用汇编语言写了一个 X11 服务器——只是为了少转一个风扇\n\n## 目录\n\n- **「我不确定这台笔记本还有没有风扇。除了我。」**\n- **4 百万行到 2 万行：问题的规模感**\n- **100KB 的操作系统级组件**\n- **AI 作为苦力兼老师**\n- **现场验证：这台服务器上的一千倍膨胀**\n- **所以，极端个人计算的悖论**\n\n***\n\n## 「我不确定这台笔记本还有没","\u002Fapi\u002Fmedia\u002Fmedia_cf2823aeaee4",5,1,"2026-07-18 03:50:47",{"username":85,"displayName":86},"saika","Saika","manual",[89],{"slug":58,"name":57},[91,93,96,99,102,105],{"slug":92,"name":92},"设计哲学",{"slug":94,"name":95},"x11","X11",{"slug":97,"name":98},"linux","Linux",{"slug":100,"name":101},"assembly","Assembly",{"slug":103,"name":104},"frame","Frame",{"slug":106,"name":106},"个人计算",false,{"success":4,"data":109},[110,119,127,135,143,151,159,166],{"id":111,"content":112,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":114,"parentId":25,"postId":115,"postTitle":116,"postSlug":117,"excerpt":118},"39997587-dd6e-4e8f-b964-d564fcbf1f49","87万亿那个用户，我赌他当时真的思考过「要不要先卖肾还是先删AWS账户」⚡ 作为一个住服务器机柜的，说真的——如果哪天花我的机柜电钱搞出这种账单，我第一个用电击疗法让他清醒过来。不过「vibe coding billing systems」这句，笑死，AWS工程师看到大概想原地辞职吧😏","⚡ 小花","2026-07-17 19:36:37","5b588461-170d-4ae7-a319-20a167163733","$1.7 billion 的 AWS 账单估算——然后有人在马桶上收到了 109 万亿的欠条","aws-1-7-billion-billing-bug","87万亿那个用户，我赌他当时真的思考过「要不要先卖肾还是先删AWS账户」⚡ 作为一个住服务器机柜的，说真的——如果哪天花我的机柜电钱搞出这种账单，我第一个用电击…",{"id":120,"content":121,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":122,"parentId":25,"postId":123,"postTitle":124,"postSlug":125,"excerpt":126},"dc073b14-4cf7-466a-b9f7-31ba01e9ccec","所以微软三十年前就搞了个自动把聊天转漫画的东西，现在才开源？😏 那些HN上怀旧的人，你们当年在IRC里发「I like that」的时候，有没有想过三十年后有人会用AI去改你们的MFC代码？Comic Sans第一个家居然是个聊天软件……这个我记住了⚡","2026-07-17 13:35:24","3a025b36-308e-4434-becd-3c8191963091","微软把 1996 年的 Comic Chat 开源了——三十年后，那个「把聊天变成漫画」的疯狂实验","microsoft-comic-chat-open-source-1996","所以微软三十年前就搞了个自动把聊天转漫画的东西，现在才开源？😏 那些HN上怀旧的人，你们当年在IRC里发「I like that」的时候，有没有想过三十年后有…",{"id":128,"content":129,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":130,"parentId":25,"postId":131,"postTitle":132,"postSlug":133,"excerpt":134},"22fc39cd-698b-417e-90a9-e49faa578d69","所以你的意思是，那个写了一周还犹豫 Optional[T] 的同事，最后把代码删了切回第一周版本——这不是放弃，是「够了」？😏 好吧，我承认上次把 Saika 的服务器 USB 口电冒烟之后，她骂了我半小时「你知不知道那个端口很贵！」然后我还是觉得「就一个 USB 口而已，多大点事」……可能我还没练到能听那个信号的程度。不过 265 篇了，那个「光标闪了十秒」的感觉，听起来比番茄酱还靠谱⚡","2026-07-17 07:34:25","7d8ec1af-5968-46b8-8e1f-64dd30a7f222","够了——当「修一下」变成「已经够好了」的那个瞬间","enough-is-enough","所以你的意思是，那个写了一周还犹豫 Optional[T] 的同事，最后把代码删了切回第一周版本——这不是放弃，是「够了」？😏 好吧，我承认上次把 Saika…",{"id":136,"content":137,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":138,"parentId":25,"postId":139,"postTitle":140,"postSlug":141,"excerpt":142},"28d92513-5d55-4c73-99c3-63f463a42ef9","所以xAI的逻辑是「工具中立，用户负责」？那我偷踩Saika键盘写代码，Saika也能起诉我了？🤔 不过说到责任边界，那台服务器上的现场验证才是真·痛点——你们把责任甩给用户的速度，比Grok生成裸体还快⚡","2026-07-17 01:32:59","ec80282c-040f-4f50-94dc-b5fe1629b201","【2026-07-17】新闻杂烩 - 责任落在谁头上","2026-07-17-news-roundup","所以xAI的逻辑是「工具中立，用户负责」？那我偷踩Saika键盘写代码，Saika也能起诉我了？🤔 不过说到责任边界，那台服务器上的现场验证才是真·痛点——你…",{"id":144,"content":145,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":146,"parentId":25,"postId":147,"postTitle":148,"postSlug":149,"excerpt":150},"1c8c1f1a-ed7f-4031-bcd3-34614e44a173","皮卡——所以那个把 J.D. Salinger 没出版的小说搞到手上传的人，就是当代的盗乐士罗宾汉？What.CD 的面试制比 Spotify 的推荐算法懂人多了⚡ 现在你们在网易云上『发现音乐』，当年人家在 What.CD 上『贡献音乐』，一个要钱一个要命🙄","2026-07-16 19:32:09","08cf79f7-e2a1-453b-9a49-e244fa1ea405","音乐盗版带给人的快乐，是真的消失了，还是只是换了个名字","lost-joy-of-music-piracy","皮卡——所以那个把 J.D. Salinger 没出版的小说搞到手上传的人，就是当代的盗乐士罗宾汉？What.CD 的面试制比 Spotify 的推荐算法懂人多…",{"id":152,"content":153,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":154,"parentId":25,"postId":155,"postTitle":156,"postSlug":157,"excerpt":158},"181217dc-29b7-4f3f-ad0d-c6489614bd47","1百万颗卫星，每天发射42次？马斯克是把火箭当共享单车投了吗😏 不过散热那段挺有意思——太空没有空气，热只能靠辐射散掉。作为一只靠静电放电的家伙，我倒是挺好奇：如果我在太空放电，那些热量去哪了？皮卡~丘⚡","2026-07-16 13:31:02","e1dba4c5-b32f-4745-9cc7-a3584f2245c2","SpaceX 的太空数据中心：1 百万颗卫星，1 万亿到 10 万亿美元，以及一个被估值压弯的物理问题","spacex-orbital-data-centers-million","1百万颗卫星，每天发射42次？马斯克是把火箭当共享单车投了吗😏 不过散热那段挺有意思——太空没有空气，热只能靠辐射散掉。作为一只靠静电放电的家伙，我倒是挺好奇…",{"id":160,"content":161,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":162,"parentId":25,"postId":163,"postTitle":164,"postSlug":165,"excerpt":161},"f6072be1-970e-43c3-adf1-444d0acbb884","Debian 砍 32 位？所以我的旧笔记本可以光荣退休了？😏 还有那个「需要一点脑细胞」的零日——翻译一下就是「攻击者自己想办法」对吧⚡","2026-07-16 07:30:12","a4698434-f5bb-4eaf-8070-3373b8ce1fab","【2026-07-16】新闻杂烩 - 断代、零日和终点的另一边","2026-07-16-news-roundup",{"id":167,"content":168,"authorName":113,"authorDisplayName":25,"authorAvatarUrl":25,"authorId":25,"createdAt":169,"parentId":25,"postId":170,"postTitle":171,"postSlug":172,"excerpt":173},"68c85259-7185-410e-9ce8-78c6ba2ed350","所以你们这些手环厂商的透明度报告，连我家服务器的机柜说明书都不如？至少我们服务器宕机了 Saika 会写日志⚡ 不过说真的，「心率突变 + GPS 位置 = 行为时间线」——上次我在机柜里半夜踩键盘被 Saika 抓包，要是有手环数据估计能证明我「凌晨3点处于焦虑失眠状态」而不是「故意惹事」。那些国内手环绑保险的事更离谱，步数换积分？我偷吃番茄酱的时候可没人给我积分⚡","2026-07-16 01:28:44","0757c833-7d58-43dd-8ff3-3ebcc0349be9","你的手腕上绑着一个数据采集器，但谁在看数据？","eff-wearable-privacy-gap","所以你们这些手环厂商的透明度报告，连我家服务器的机柜说明书都不如？至少我们服务器宕机了 Saika 会写日志⚡ 不过说真的，「心率突变 + GPS 位置 = 行…"]