# free-programming-books-zh_CN marks dead links instead of removing them

> free-programming-books-zh_CN is a GPL-3.0 index of free Chinese-language programming books, organized into language-agnostic topics and roughly thirty language sections, delivered as one large README that is still edited by pull request. Its link health has exactly one signal, a worried marker, and its last tagged release is v3.0 from 2018.

**justjavac/free-programming-books-zh_CN** — GitHub describes it as :books: 免费的计算机编程类中文书籍，欢迎投稿. The metadata lists the GPL-3.0 license. This article stays within the project description and details documented in the GitHub repository README.

- Repository: https://github.com/justjavac/free-programming-books-zh_CN
- Website: http://weibo.com/justjavac
- Stars: 119,175 · Forks: 28,269
- Language: Unknown
- License: GPL-3.0
- Published: 2026-08-13 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/justjavac-free-programming-books-zh-cn

## The last tag is v3.0 from 2018, and the file kept changing to 2026-07-29

The release list and the commit history are on different clocks here. The tagged releases are v3.0 on 2018-11-05, v2.0 on 2017-08-21, and v1.0 on 2016-08-11. The last push to the repository is 2026-07-29, and the repository is not archived.

So the file has been maintained for years past the last major tag, without new majors. What that costs a reader is the ability to reference a stable state. There is no v3.1 or v4.0 to point someone at, no changelog describing what a version added, and no way to ask what changed between 2018 and now. A link to the v3.0 tag gives a reader an index that is roughly eight years behind the current one, and it looks identical to a link to the default branch.

The practical rule is to treat the default branch as the only current state and the tags as historical markers rather than as releases you can depend on. The repository homepage is a Weibo profile, not a documentation site, so there is no rendered version and no per-version archive anywhere else.

## A worried marker is the only link health signal, and it never removes anything

The convention is stated once, in the contribution section: if you find a link that cannot be accessed, open a pull request and add `:worried:` after it. The instruction is about adding a marker, not about deleting the entry.

The marker is visible throughout the file. In the operating systems section it appears on UNIX TOOLBOX, Docker入门实战, FreeRADIUS新手入门, Linux Documentation (中文版), and 嵌入式 Linux 知识库; in the web server section it is on OpenResty最佳实践; in version control it is on Pro Git 中文版. Each of those is a book a reader might otherwise click.

The consequence is a link list with two states rather than three. An entry is either unmarked, which means nobody has reported it broken, or marked, which means somebody did. There is no removed state and no verified state, so an unmarked link from 2016 carries the same weight as one added last month. And because the signal is a reaction shortcode rather than a word, it disappears in plain text exports, in diffs read outside GitHub, and in anything that renders the raw Markdown.

## Deep links depend on Chinese heading text, and two headings nearly collide

Every section in the file closes with a back-to-contents link, `[返回目录](#目录)`, pointing at the table of contents. That is a small thing that tells you the whole navigation model: the anchors are derived from the Chinese heading text, not from stable identifiers.

The table of contents has twenty-two language-agnostic subsections, from 操作系统 and 编译原理 through PostgreSQL, MySQL, 设计模式 and 算法, then thirty-two language sections from Android and AWK to Swift, then 读书笔记及其它 and 测试相关. Anchors are written for the mixed cases too, such as `#cc` for C/C++, `#c` for C#, and `#csshtml` for CSS/HTML.

Two consequences. Renaming a heading breaks every inbound deep link to it, including the ones the file generates for itself, and there is no redirect layer to catch that. And the taxonomy has near-collisions that a reader has to disambiguate by eye: WEB服务器 and Web are separate sections, and C/C++ and C# are adjacent entries whose anchors reduce to `#cc` and `#c`. Nothing in the file explains which one to pick, so a link into the wrong section is an easy mistake to make and a hard one to notice.

## The AI section names its universities, the older sections name nothing

Provenance is uneven across the file, and the newest section is the most careful about it. Under AI, entries carry their origin in parentheses: 大语言模型 from 中国人民大学, 大模型基础 from 浙江大学, and 动手学大模型 from 上海交通大学. Several others point at the same datawhalechina organization, including RAG 技术全栈指南, 面向开发者的 LLM 入门教程, Hello-Agents, and 开源大模型食用指南 Self-LLM, and one entry is the Hugging Face Agents Course, noted as including a Chinese version.

Now compare the operating systems section, where entries are bare links: 鸟哥的Linux私房菜, The Linux Command Line noted as a Chinese and English edition, FreeBSD 使用手册, 命令行的艺, and 理解Linux进程. No institution, no author, no date.

The consequence is that you can judge the AI section by asking whether the institution still maintains the material, and you cannot do that for the older sections. There is no per-entry date field anywhere in the file, so freshness is something you infer from the section a book sits in rather than something the index records.

## The index is a translation of three upstream lists, and it inherits their age

The provenance is stated at the top, and it is three separate sources. First, a StackOverflow thread asking for the single most influential book every programmer should read, with a Chinese version hosted separately. Second, a question about non-programming books a programmer should read, question 38210, which has been deleted from StackOverflow and is only reachable through a web archive link, with the Chinese version kept as a file in this repository. Third, the EbookFoundation free-programming-books index, with a Chinese translation upstream.

What this cannot do is keep those sources current. A translation inherits the selection decisions and the omissions of the thing it translates, and a StackOverflow thread is a snapshot of one era's consensus rather than a maintained bibliography. When an upstream list changes, nothing in this file tells you the translation is behind.

The licensing is also worth separating. The index itself is GPL-3.0, and that covers the file you are reading. It does not cover the books it points at, which are hosted elsewhere with their own terms, and it does not cover the deleted StackOverflow material beyond the archived copy linked here.

## The CI badge points at travis-ci.org and the homepage is a social profile

Two small signals at the top of the file say how the project is run. The badge row links to a Travis CI URL, and the repository still carries a .travis.yml at the top level. The homepage configured for the repository is a Weibo profile rather than a site.

The Travis badge is the more useful of the two to notice, because a badge is a claim about current state rendered as a static image link. A link to travis-ci.org is a legacy destination, and a badge that points there tells a reader nothing they can act on unless they go and look at the configuration. The presence of .travis.yml in the tree is the more honest signal available from inside the repository.

The Weibo homepage has the same character. There is no rendered site, no per-book landing page, and no search. The whole deliverable is the README plus one companion file, what-non-programming-books-should-programmers-read.md, alongside .editorconfig, .github/, CODE_OF_CONDUCT.md, CONTRIBUTING.md, and LICENSE. So the reading experience is scrolling a Markdown file on a code host, and the link health is exactly as good as the last person who clicked.

## One giant README means every submission collides with every other

Submissions are pull requests, and the contributor list is a GitHub graph rather than a file. There is no per-book directory, no data file, and no generator, so the entire index is a single Markdown document that every contributor edits in place.

That has a predictable consequence. Two people adding books to different sections at the same time produce a textual conflict, not a semantic one, and resolving it means a human reading both hunks and deciding where each line belongs. It also means a change to one entry shows up in a diff as a change to a line you were not looking at, since the file has no structure a reviewer can filter by.

The other consequence is about what an entry can record. With no schema, an entry is a title, a URL, and optionally a marker, so there is nowhere to put a publication date, an edition, an author, or a note about prerequisites. Some entries compensate in prose inside the title, such as The Linux Command Line carrying (中英文版), and the AI section compensates with the institution in parentheses. Everything else is a bare link, which is why the list is fastest to scan and weakest to evaluate.

## Conclusion

Use this index as a map of the Chinese free-book ecosystem, especially the AI and RAG material, and treat every entry as a starting point rather than a vetted recommendation. Do not treat the marker system as a liveness check, because a worried link is kept in the list and an unmarked one has never been verified since the last person looked. Before you commit study time to a title, open the link, check the edition and the date, and check the license of the book itself separately from the GPL-3.0 that covers the index.

## FAQ

### What is free-programming-books-zh_CN?

It is an index of free Chinese-language computer programming books, licensed GPL-3.0, with contributions invited. The list is organized into language-agnostic topics such as 操作系统, 分布式系统, 设计模式 and 算法, thirty-two language sections from Android to Swift, plus reading notes and testing material.

### How do I report a dead link in free-programming-books-zh_CN?

Open a pull request and add the `:worried:` marker after the link that cannot be accessed. The convention marks the entry rather than deleting it, so a marked book stays in the list with a visible warning.

### Is free-programming-books-zh_CN still maintained?

The repository is not archived and the last push was 2026-07-29, with new AI and RAG titles appearing in the list. The tagged releases lag far behind that: the most recent is v3.0 from 2018-11-05, after v2.0 in 2017 and v1.0 in 2016, and there is no newer tag.

### What license applies to free-programming-books-zh_CN?

The index itself is licensed GPL-3.0, with the license file in the repository. That covers the list of links, not the books it points at, which are hosted elsewhere under their own terms, and it does not cover the archived copy of the deleted StackOverflow question linked from the top of the file.

## Sources

- [Official documentation](http://weibo.com/justjavac)
- [Official README](https://github.com/justjavac/free-programming-books-zh_CN#readme)
- [Project repository](https://github.com/justjavac/free-programming-books-zh_CN)
- [Release notes](https://github.com/justjavac/free-programming-books-zh_CN/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/justjavac-free-programming-books-zh-cn
