【开源许可与版权工程】开源世界全景:从 GNU 到大模型的四十年
一篇写给中国工程团队的开源世界地图:从 1983 年 Richard Stallman 发起 GNU 项目、1998 年 OSI 成立、2018 年 MongoDB 更改 SSPL,到 2020 年开放原子开源基金会成立、再到 2024 年大模型时代的 OpenRAIL 与 LLaMA 许可,把四十年的关键事件、基金会、协议演进和中国线索串成一张可直接指导选型的全景图。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 31 篇文章 · 返回首页
一篇写给中国工程团队的开源世界地图:从 1983 年 Richard Stallman 发起 GNU 项目、1998 年 OSI 成立、2018 年 MongoDB 更改 SSPL,到 2020 年开放原子开源基金会成立、再到 2024 年大模型时代的 OpenRAIL 与 LLaMA 许可,把四十年的关键事件、基金会、协议演进和中国线索串成一张可直接指导选型的全景图。
要理解 Linux 的很多古怪决定,得回到 Multics、Unix V6/V7、BSD 的历史语境。本文沿时间线梳理 Unix 家谱,挑出每一代留下的设计遗产——fork/exec、一切皆文件、管道、可重定向的 stdin/stdout、9P、命名空间——并指出哪些被 Linux 发扬,哪些被抛弃,哪些仍在 Plan 9 的血脉里孤独活着。
系统调用是 OS 最稳定的接口。本文拆解 Linux syscall 的参数寄存器约定、返回值规范(负 errno 与 2-value ABI)、x86_64 SYSCALL、arm64 SVC、RISC-V ECALL、Windows NT 的 int 2e/syscall/SYSENTER 历史;说明为什么 Linux 承诺 \"don't break userspace\"、什么东西算 syscall ABI、vDSO 如何用共享内存加速、Go/musl/glibc 各自怎么实现 syscall stub。
POSIX 标准定义了 \"一个像 Unix 的 OS 应该长什么样\",但没有哪个真实 OS 完全等于它。本文对照 POSIX 基准,列出 Linux、FreeBSD、macOS、Windows 的扩展与偏离:Linux-only 的接口(epoll、io_uring、eventfd、prctl)、BSD-only(kqueue、pf)、NT 的异步模型、符号链接/路径语义差异、signal 语义的方言、fork 的地位演变。
应用程序每一次 read() 或 write() 系统调用,感觉像是直接在操作磁盘上的文件,但实际上,内核在中间插入了一层透明的缓存——页缓存(Page Cache)。这层缓存用物理内存保存最近访问过的文件数据,使得绝大多数读操作不需要触发磁盘 I/O,而写操作可以先落到内存,再由后台线程异步刷回存储设备。
系统讲解 L4 负载均衡的内核实现:IPVS 的工作原理与三种转发模式(NAT/DR/TUN)、调度算法选择、LVS 高可用方案(Keepalived + VIP)、云环境中的 L4 LB(NLB/MetalLB),建立传输层负载均衡的工程能力。
系统讲解 tcpdump 的工程实战:BPF 过滤语法完整指南、滚动捕获策略、时间戳精度控制、容器/Pod 环境抓包、高级用法与性能优化,让抓包成为系统化的诊断方法。
系统讲解网络故障排查的方法论:OSI 分层排查法、连通性/性能/间歇性三类故障的诊断路径、排查决策树、工具链选择、真实故障案例复盘,建立从'网络不通'到精确定位根因的工程能力。
系统讲解 Linux 网络诊断工具链:ss 的过滤语法与性能优势、ip 命令族全景、conntrack 连接追踪、/proc/net/ 文件解读,建立从 Socket 状态到连接审计的工程能力。
系统讲解 eBPF 在网络诊断中的工程应用:bcc 工具集(tcplife/tcpretrans/tcpdrop)的使用场景、bpftrace 自定义网络探针编写、XDP 丢包分析、内核协议栈延迟追踪,建立基于 eBPF 的系统化网络诊断方法。
深入解析 Linux io_uring 的核心机制:提交队列 (SQ)、完成队列 (CQ) 与零拷贝技术,理解它如何重塑高性能网络编程。
全方位对比 io_uring 与 epoll:从系统调用开销、内存管理到编程模型,分析 io_uring 在高性能 I/O 场景中的优势与局限。
手把手教你使用 liburing 编写第一个 io_uring 程序。详解 io_uring_queue_init, io_uring_submit 等核心 API 的使用流程。
深入网络编程,实现一个异步 TCP 服务器。学习如何使用 user_data 管理连接上下文,处理 Accept, Read, Write 链式调用。
深入探讨 io_uring 的进阶功能:SQPOLL (零系统调用)、Fixed Files (减少引用计数开销) 和 Provided Buffers (自动缓冲区管理)。
并非所有场景都适合 io_uring。深入分析快路径延迟、内存隐性成本、生态复杂度等因素,帮助你做出理性的技术选型。
系统梳理 Go 集成 io_uring 的关键问题:何时值得做、CGO 与纯 Go 如何取舍、runtime.Pinner、固定缓冲区与 SQPOLL 的工程实践。
一份面向线上事故的事件驱动代码排障手册:从症状收敛、strace/eBPF/perf 逐层下钻,到 OpenTelemetry 集成与 Sanitizer 离线复盘。
系统梳理 io_uring 的线程安全模型与四种主流多线程架构模式(Thread-per-Ring、Shared Ring、Submit/Reap 分离、SQPOLL),包含完整的多线程 Echo Server 实战、NUMA 优化、性能对比与生产避坑指南。
从源码级别拆解 Go runtime 的 GMP 调度器:G/M/P 结构体、schedule() 调度循环、work stealing、协作式到异步抢占的演进、netpoller 与 syscall 处理,以及与 Linux CFS 调度器的正面对比。
Linux 内核 ACCESS_ONCE/READ_ONCE/WRITE_ONCE 宏详解:并发编程与内存访问
Linux 文件 I/O 深度解析:内核文件表、系统调用与文件描述符管理
TCP SYN 处理详解:三次握手、SYN Flood 防护与网络性能优化
Linux 高并发服务器内核参数调优:文件描述符、TCP 网络栈与 core dump 配置
Linux 进程调度详解:调度类、优先级与实时任务调度机制
Linux 进程状态详解:运行、睡眠、僵尸等 7 种进程状态分析
sendfile/splice/io_uring 的 zero-copy 路径深度解析与实测。揭示小数据包场景下传统 copy 因 cache locality 反而更快的反直觉真相。
Shell 脚本实用技巧集合:提高命令行效率的实用代码片段
Linux Daemon 进程创建指南:后台服务开发规范与最佳实践
程序内存布局详解:虚拟内存、栈、堆、代码段、数据段的组织结构
Linux 提权技术详解:权限提升原理、常见漏洞利用方法与防护措施