Open-source project
netkiller/netkiller.github.io avatar
netkiller/netkiller.github.io

Netkiller's free ebook series: a DocBook pipeline that publishes books instead of posts

Netkiller Free ebook - 免费电子书

1,286 stars417 forksHTMLLicense varies

At a glance

What is it?
The netkiller.github.io repository is the source for a long-running series of free Chinese-language technical ebooks covering Linux, databases, networking, and devops, built with DocBook SGML and published as a website. The README explains the reasoning behind the whole arrangement, and it is unusual in what it says about how a book should be updated.
Who is it for?
The netkiller ebook series fits a reader who wants a long, systematic, free reference on a specific infrastructure topic in Chinese, and a writer who wants a book-shaped document pipeline rather than a blog. It is the wrong source for a general introduction, since the material assumes a working knowledge of the system, and it is the wrong place to contribute, because the README asks readers not to send pull requests.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 24 days ago.
What is it written in?
Mainly HTML, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • netkiller/netkiller.github.io1,286 ★ · +5
Star history
Repository2026-10-202026-11-07
netkiller/netkiller.github.io1.3k1.3k

5 Stars in the last 18 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

A book pipeline, not a blog, and the reason why

The project summary is written in Chinese and it explains itself unusually well, so the reasoning is worth following.

Netkiller is a nickname the author has used since 1999, and 手札, the series name, means a set of notes or a handbook. Before 2003 the author published technical articles on BBS boards, and then found that articles were not systematic enough, so he started writing long technical articles with a table of contents and chapters. As the content grew and was revised, he published a first edition, then a second edition, and so on.

Then he described the problem that created the current arrangement. IT knowledge changes very quickly and is time-sensitive, so publishing in editions was very confusing. Readers would often find that the examples in the first edition were already out of date, and they had no way of knowing that a second edition had been published.

So the idea was to always maintain a single document and keep updating it, so that it stays recent and does not go out of date. That is the whole design goal of the project, and it explains everything else about it.

The toolchain follows from the same decision. The first ebook was a PostgreSQL practical examples reference, and it began in Microsoft Office Word, which started to struggle as the document grew. The author then saw that the Chinese PostgreSQL manual was written in SGML and learned DocBook SGML, and the first ebook written in DocBook was Netkiller Postfix Integrated Solution, which is described as the prototype of the series. The name 手札 comes from a Taiwanese photography website the author liked, called 摄影家手札.

The whole history is a single argument for one continuously maintained document, and the DocBook pipeline is the mechanism that makes it possible.

The content is infrastructure manuals, and the directory list is the catalogue

The repository topics are the clearest index of what the series covers, and they are almost entirely server and infrastructure subjects: apache, book, centos7, docbook, ebook, epub, freebsd, linux, memcached, mongodb, mysql, netkiller, nginx, openssl, openvpn, postgresql, redis, strongswan, tomcat, and ubuntu.

The directory names tell the same story with more detail. There are `centos/`, `debian/`, `freebsd/`, and `linux/` for the operating systems, `database/`, `mysql/`, `nosql/`, and `postgresql/` for the data stores, `network/`, `ldap/`, `openldap/`, and `mail/` for the network and directory services, `cisco/` and `h3c/` for the network equipment vendors, `devops/`, `container/`, `deploy.sh`, and `monitoring/` for the operations side, and `cryptography/` and `security/` style directories for the security material.

Then there are directories that are not about a technology at all. `architect/` is about system architecture, `developer/` about development, `management/` about management, `monitor/` and `monitoring/` both present, `harmonica/` which is an unusual name, `history/`, `journal/`, `essays/`, and `english/` for the English-language material.

The `oss/` and `download/` directories suggest that some of the content is also distributed as a downloadable artefact, and the `epub` topic supports that. The `docbook/` directory with a matching `docbook.css` is the style sheet, and the presence of `generate_sitemaps.py` at the root shows that the site build includes a step that writes sitemap files.

Two other root files are worth noting. There is a `llms.txt`, which is the convention for a plain-text index of a site for language models, and there is a `params.json`, which suggests some parameterised generation step. There are also several verification HTML files, which are the usual artefacts of registering a site with search engines and a social network, and a `CNAME.backup` alongside the `CNAME` that would hold the custom domain.

The website is the distribution channel, GitHub is the mirror

The project summary lists two homepages, the GitHub Pages site at netkiller.github.io and a SourceForge mirror at netkiller.sourceforge.net, and then gives a mirroring instruction:

code
git clone https://github.com/netkiller/netkiller.github.com.git

The clone URL names the old repository name, netkiller.github.com, while the repository itself is netkiller.github.io. That is a renaming that happened when GitHub Pages moved from the.com subdomain to.io, and the clone instruction in the documentation was not updated to match the current repository name. It is a small thing, but it is the kind of small thing that costs a newcomer a few minutes.

The deployment model is worth understanding. The site is generated from the DocBook sources, and the HTML is committed to the repository, which is why there are so many static files at the root and in the topic directories. The `deploy.sh` script and the `generate_sitemaps.py` are the build tooling, and the `index.nginx-debian.html` file is an example configuration page for serving the site with nginx on Debian.

This structure has a consequence for readers. The site is not generated on demand, so the published version is whatever was committed, and the repository's last push was on 2026-10-15, which is a useful signal about how current the content is. The author has not tagged releases either, so there is no version number to cite and no changelog of editions to diff against. You either read what is published or you read the source.

The build is also self-hostable, since the whole thing is plain HTML and a stylesheet, and the `javascripts/` and `js/` directories hold the client-side assets.

Contributing means writing to the author, not opening a pull request

The tip section of the project summary is the most unusual instruction in the repository, and it is a direct consequence of the DocBook decision.

It asks readers not to send pull requests, because this document is generated by Docbook. Anyone who wants to contribute is asked to contact the author, who will then provide the Docbook XML source address.

That is a well-reasoned rule rather than a gatekeeping one, and the reasoning is sound. The published HTML is an artefact of a build, so a pull request against it would be a pull request against generated output, and merging it would either be overwritten by the next build or would mean merging by hand into a file the tool owns. The only coherent workflow is to edit the source, which means the source has to be shared deliberately rather than pulled from a public branch.

The practical consequence for a reader is that this is not a repository where you can send a typo fix, and it is also a repository where a substantive contribution, a new chapter on a topic, or a correction, is possible but mediated by one person. For a project with a single author, that is the natural shape, and the author does say that contributions of source code, documentation, and examples are welcome, along with bug reports and any other contributions, and that feedback, opinions, and suggestions are all appreciated.

The author details are given plainly, Neo Chan with the contact address, a QQ number, an official QQ group number, and the same email address. There is a Gitter chat badge at the top of the summary, which is a community channel that predates the current generation of chat platforms.

The donation section is equally direct, with a PayPal link and a page covering WeChat and Alipay tipping, which is the normal arrangement for a project that is free to read and hosted by its author.

Ebooks, mirrors, and the absence of a stated licence

The licence field in the repository listing is given as unknown, and there is no LICENSE file in the top-level entries. That is a real difference from most open source repositories, and it deserves a clear statement rather than a vague one.

What the project says about itself is that it is a set of free ebooks, and the wording in the summary is that these are free series ebooks. The package is described as an ebook in the topics and in the description, and the file layout supports that reading, with per-topic directories holding the generated book content and the `download/` and `epub` entries suggesting distributable formats.

The distinction that matters in practice is between the content being free to read and the content being free to redistribute or to build on. The repository does not state a licence, and the absence of a licence file in the root means a reader cannot point at a grant. That does not make the content unusable, and the author invites contributions and feedback, but it does mean a team that wants to republish a chapter, translate it, or fold it into an internal handbook has no stated permission to point at.

The two homepages and the clone instruction also suggest a distribution model that is deliberately informal. The project is mirrored to SourceForge as well as hosted on GitHub Pages, which is the pattern of a personal site from an era when GitHub Pages did not exist or was not trusted for long-lived content, and the mirror is still listed.

The `CNAME` file, present as `CNAME.backup`, is what binds the GitHub Pages site to the custom domain, and `ByteDanceVerify.html` and the `baidu_verify_codeva-JvCTJkeWZO.html` and `google957a3babfdade4b2.html` files are the domain ownership verification files for those search and social platforms, which is a small window into how the site was set up and maintained.

Where this project is the wrong place to look

The limits are about format, language, and audience, and they are clear once you know what the series is.

First, it is a book series, not a tutorial track. The books are organised as manuals for people who are already running these systems. There is no introductory path through Linux or through PostgreSQL in the sense a beginner needs, and the topics list makes the level clear, with things like strongswan, cisco, h3c, openldap, and memcached alongside the more common subjects. A reader who does not already know what a TLS tunnel or a directory server is will not find the entry point here.

Second, it is Chinese. The project summary, the books, and the discussion are in Chinese, and while there is an `english/` directory, the series as described is a Chinese-language body of work. A reader who does not read Chinese cannot use it, and that is a hard limit rather than a matter of translation, since the books are not machine-translated and the translations that exist are not the same as the originals.

Third, the licensing gap is a real constraint for the kind of user the books are most valuable to. A team that wants to keep a copy of a chapter internally, or to adapt it for their own infrastructure, has no stated permission to do so. A licence file would settle that in one line, and its absence is the single most consequential thing about the repository as a source.

Fourth, the contribution model does not scale. The Docbook approach gives the author a single source of truth and produces consistent books, and the cost is that every correction has to go through one person. A reader with a broken command or an outdated package version in a chapter has no direct route to fix it.

Fifth, and this is the mundane but important one, the output is static HTML committed to a repository. That means the site you read is the site as of the last push, which was on 2026-10-15, and there is no versioning, no release tagging, and no way to see what changed between two visits without diffing the repository yourself.

That last point cuts both ways. The continuous update of a single document, which was the original motivation, means there is only ever one current version and never an outdated edition to trip over, which was the problem the author set out to solve. What it does not give you is history, and for a book that people cite, the absence of a version to cite is a limitation of the same design.

Editorial conclusion

The netkiller ebook series fits a reader who wants a long, systematic, free reference on a specific infrastructure topic in Chinese, and a writer who wants a book-shaped document pipeline rather than a blog. It is the wrong source for a general introduction, since the material assumes a working knowledge of the system, and it is the wrong place to contribute, because the README asks readers not to send pull requests. Check three things before relying on it: that the topic you need is actually covered by one of the books rather than assumed, that you can read Chinese, since the project is written and maintained in that language, and that you understand the versioning scheme, because the reason the project exists is that earlier editions went out of date and readers could not tell which one they had.

Frequently asked questions

What is the Netkiller free ebook series and what does it cover?

It is a series of free Chinese-language technical ebooks published as a website, covering server and infrastructure subjects including Linux, CentOS, Debian, FreeBSD, MySQL, PostgreSQL, MongoDB, Redis, Memcached, Nginx, Apache, OpenVPN, StrongSwan, LDAP, Tomcat, OpenSSL, devops, containers, and monitoring. The source is in the repository and the published HTML is committed alongside it.

Why does the Netkiller project ask contributors not to open pull requests?

Because the document is generated by Docbook, so the published files are build output rather than hand-edited source. The project asks you to contact the author instead, who will then give you the Docbook XML source address so a contribution can be made against the real source.

How is the Netkiller ebook series built?

With DocBook SGML. The author started in Microsoft Office Word with a PostgreSQL reference, found Word struggling as the document grew, learned DocBook SGML after seeing the Chinese PostgreSQL manual written that way, and wrote Netkiller Postfix Integrated Solution as the prototype of the series. The build also includes a `generate_sitemaps.py` step, and the site is served as static HTML with a `docbook.css` stylesheet.

Where can I read the Netkiller ebooks and how do I mirror them?

The homepages are netkiller.github.io and netkiller.sourceforge.net. The mirroring instruction in the project summary is to run `git clone https://github.com/netkiller/netkiller.github.com.git`, though that command still uses the old repository name and the current repository is netkiller.github.io, so the URL needs correcting.

Official sources

  1. Issues
  2. netkiller/netkiller.github.io on GitHub
  3. Project website
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/netkiller-netkiller-github-io.svg)](https://hysenlabs.com/projects/netkiller-netkiller-github-io)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/netkiller-netkiller-github-io.svg)](https://hysenlabs.com/projects/netkiller-netkiller-github-io)

Was this useful?