| tags: [ Debian Ubuntu VoidLinux Gentoo CRUX Slackware NixOS Guix FreeBSD NetBSD OpenBSD DragonflyBSD ] categories: [ OS ]
BSD、Linux 软件库的一点分析
参考:
- https://archiveprogram.github.com/assets/img/archive-repos.txt
- https://ghe.clickhouse.tech
- https://gitmostwanted.com
- https://github.com/sindresorhus/awesome
- https://repology.org
- https://softwareheritage.org
- https://www.tuhs.org
- https://mirrorz.org
LXR:
- http://lxr.linux.no
- https://elixir.bootlin.com/linux/latest/source
- https://lxr.missinglinkelectronics.com
- https://archiveos.org
根据 https://repology.org/repositories/graphs 分析活跃的软件仓库有NixPkgs, AUR, Debian, FreeBSD Ports, DPorts, Fedora, Gentoo, Guix, pkgsrc, openSUSE, Alpine, LFS/BLFS。
先说结论,Slackware、Debian、Ubuntu、Redhat、SuSE 直接在软件仓库里附带了源码包,其中 Slackware、Debian、Ubuntu、Redhat 历史留存完好。Slackware 虽然很值得敬仰,但基本是个人作品不适合做服务器用途,Redhat 商业化味道很重,版本比较乱,历经多次变更,尤其现在 CentOS 不再让白嫖了,实在没必要再去贴冷屁股,SuSE 断代的她爹都不认识了, 所以剩下的只有值得信赖的 Debian 和 Ubuntu 了,2022 年依然可以使用 2005 年发布的Debian Sarge(3.1) 和 2004 年发布的 Ubuntu 4.04(Warty Warthog)。
Gentoo 和 NetBSD 保存了比较完整的源码包,定期删除,LFS/BLFS 也提供源码包镜像,但 收录的软件包比较少。FreeBSD ports 和 DPorts 保存了部分源码包, 其它诸如NixPkgs、 AUR、Guix、Alpine 都是直接下载软件包官网的源码包,所以不要指望方便的找回老版本了,只能可劲的升级升级再升级永不回头。
补充:FreeBSD、NetBSD、OpenBSD 都有 old releases 的归档服务,可以找到当时发布时 ports tree 对应的源码包。
Debian 软件仓库里的 pool/ 下面包含了源码,以 *.dsc 文件描述:
- http://archive.debian.org/debian/dists/?C=M;O=A
- https://cdimage.debian.org/cdimage/
- http://archive.ubuntu.com/ubuntu/dists/?C=M;O=A
- https://cdimage.ubuntu.com
- https://old-releases.ubuntu.com/
- https://mirror.nju.edu.cn/ubuntu-old-releases/
Redhat:
Fedora:
- https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/
- https://mirror.nju.edu.cn/fedora-archive/fedora/linux/releases/
CentOS:
EPEL:
Slackware 镜像很完整,老版本一直存着:
FreeBSD distfiles 里只有部分软件包,其它的在外部源上:
- http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/
- http://distcache.FreeBSD.org/ports-distfiles/
- http://distcache.FreeBSD.org/local-distfiles/
- http://mirrors.ustc.edu.cn/freebsd-ports/ (此目录下的 distfiles/ 目录)
- https://github.com/freebsd/freebsd-ports/blob/main/Mk/bsd.sites.mk
- https://github.com/freebsd/freebsd-ports/blob/main/Mk/bsd.port.mk
DragonFlyBSD 使用 FreeBSD 的 distfiles,自己也补充了一部分:
Gentoo:
- https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base
- https://mirrors.tuna.tsinghua.edu.cn/gentoo/ (此目录下的 distfiles/ 目录)
NetBSD:
- https://archive.netbsd.org/pub/NetBSD-archive/
- https://www.netbsd.org/docs/pkgsrc/using.html#fetching-distfiles
- https://www.netbsd.org/docs/pkgsrc/configuring.html#mk.conf
- http://ftp.netbsd.org/pub/pkgsrc/
- https://mirrors.tuna.tsinghua.edu.cn/pkgsrc/ (此目录下的 distfiles/ 目录)
- https://www.netbsd.org/mirrors/
OpenBSD:
- https://www.openbsd.org/ftp.html
- https://ftp.eu.openbsd.org/pub/OpenBSD/
- https://openbsd.ipacct.com/pub/OpenBSD/
- https://ftp.heanet.ie/pub/OpenBSD/
- https://ftp.icm.edu.pl/pub/OpenBSD/
- https://ftp.psnc.pl/pub/OpenBSD/
- https://mirror.yandex.ru/pub/OpenBSD/
- https://ftp.lysator.liu.se/pub/OpenBSD/
LFS 和 BLFS 收录的软件包不多:
- https://www.linuxfromscratch.org/lfs/view/stable/chapter03/introduction.html
- https://www.linuxfromscratch.org/blfs/view/stable/introduction/packages.html
- https://www.linuxfromscratch.org/mirrors.html#files
- https://www.linuxfromscratch.org/blfs/download.html#sources
ArchLinux 保存了二进制包历史,但没有保存源代码。ArchLinux 确实从来就不保存源码,它只有 PKGBUILD 和补丁文件。
Cygwin 保留最近几个版本,有源码。第三方 TimeMachine 保留了 2002 年以来的老版本。
- https://www.cygwin.com/packages/summary/git-src.html
- http://www.crouchingtigerhiddenfruitbat.org/cygwin/timemachine.html
MinGW + MSYS 使用 Pacman 管理二进制软件包, 在 github 上管理 PKGBUILD 文件。
打包了 Gnome 2.30 or 2.32 的发行版:
-
Gnome 2.30, 2010.3
-
Gnome 2.32, 2010.9
-
Fedora 14, Gnome 2.32, 2010.11.2
-
Debian 6(Squeeze), Gnome 2.30, 2011.2.6
-
Ubuntu 10.10(Maverick), Gnome 2.32, 2010.10.10
-
Ubuntu 11.04(Natty), Gnome 2.32(use Unity by default), 2011.4.28
参考 https://repology.org/repositories/statistics/newest 分析下几个软件仓库:
Repository | Total | Non-unique | Newest | Newest Ratio | Architecture | OS |
---|---|---|---|---|---|---|
nixpkgs unstable | 80969 | 65041 | 54657 | 89.5% | x86, amd64, arm64 | Linux, MacOS |
AUR | 70532 | 35668 | 21277 | 72.4% | x86_64 | Linux |
Debian Unstable | 35354 | 26902 | 19365 | 72.4% | x86*,arm*,ppc*,s390x | Linux |
FreeBSD Ports | 29475 | 25017 | 17913 | 73.1% | x86*,arm*,ppc*,riscv64 | FreeBSD |
Fedora Rawhide | 22332 | 19902 | 14409 | 73.9% | amd64,arm64 | Linux |
Gentoo | 18152 | 15071 | 10320 | 75.9% | x86*,arm*,alpha,hppa,ia64,loong, mips,m68k,ppc,riscv,s390,sparc,x86 |
Linux, macOS, Solaris, |
openSUSE Tumbleweed | 14569 | 13098 | 10305 | 79.7% | amd64,i686,arm64,ppc64le,ppc64,s390x | Linux |
Arch | 10924 | 10384 | 9051 | 88.3% | x86_64 | Linux |
pkgsrc current | 16555 | 14386 | 9038 | 63.4% | 15+ | BSD, Solaris, Linux, macOS |
GNU Guix | 20240 | 15537 | 8174 | 55.1% | x86_64,i686,armhf,aarch64,powerpc64le | Linux |
Alpine Linux Edge | 9388 | 8791 | 7351 | 85.7% | aarch64,armhf,armv7,ppc64le,s390x,x86,x86_64 | Linux |
OpenBSD Ports | 8926 | 8211 | 5516 | 68.2% | amd64,arm64,i386,octeon,ppc64,riscv64,sparc64 | OpenBSD |
Void Linux | 8453 | 8126 | 5279 | 65.5% | x86_64,i686,armv6l,armv7l,aarch64 | Linux |
OpenMandriva Rolling | 13764 | 12562 | 5232 | 55.6% | x86_64 | Linux |
SlackBuilds | 8200 | 7386 | 3865 | 53.9% | x86_64,aarch64 | Linux |
Ravenports | 3015 | 2974 | 2916 | 98.9% | x86_64,amd64 | BSD, MacOS,Solaris,Linux |
MSYS2 mingw | 2137 | 2063 | 1627 | 80.3% | x86 | Windows |
CRUX | 1799 | 1751 | 1666 | 95.7% | x86_64 | Linux |
Slackware64 current | 1655 | 1617 | 1416 | 89.1% | x86_64,aarch64,s390 | Linux |
Cygwin | 3133 | 3045 | 1269 | 42.1% | x86 | Windows |
MSYS2 msys2 | 513 | 490 | 341 | 70.6% | x86 | Windows |
以 GTK 4 为例:
-
⭐️Slackware 直白原始的构建脚本 (Bash),不依赖包管理工具,记录手动执行的命令,不支持构建选项,不支持交叉编译,不拆分软件包,可以在 x86/arm/s390 主机上编译
-
⭐️⭐️⭐️Void Linux 依赖包管理工具 xbps,抽取了通用构建命令,Bash 脚本很简洁,支持构建选项,支持交叉编译,拆分软件包
-
⭐️⭐️Chimera Linux 派生自 Void Linux 的软件仓库,将 Bash 脚本转换成了 Python 脚本,依赖包构建工具 cbuild 和 Alpine Linux 的包管理工具 apk,支持构建选项(没有 Void Linux 丰富),支持交叉编译,拆分软件包
-
Alpine Linux 跟 Void Linux 很像,也使用 Bash 脚本,但通用构建命令抽取不如 Void Linux 彻底,支持构建选项(Chimera Linux 与之类似),拆分软件包,不支持交叉编译
-
⭐️ArchLinux 使用 Bash 脚本,拆分软件包,不支持构建选项,不支持交叉编译,CRUX 与 ArchLinux 类似
-
openSUSE 使用 spec 文件,拆分软件包,不支持构建选项,不支持交叉编译
总结来说,Void Linux 和 Gentoo Linux 更合我个人口味:
-
Void Linux 的 xbps-src 和 Gentoo Linux 的 Portage 都很简洁,后者更规范更高级(也更复杂点);
-
Chimera Linux 结合了 Alpine、FreeBSD/NetBSD/OpenBSD、Void Linux 的味道,也有点意思;
-
NixPkgs 收录的软件包超级多,而且 Nix 的设计非常独特,值得玩玩;
-
Slackware 由 Patrick 本科毕业后维护近三十年,发行版构建的非常直(tu)白(bie),很有老派 Unix 味道,可堪怀旧;
-
ArchLinux 则介于 Slackware 和 Void Linux/Gentoo Linux 之间,没有 Slackware 土鳖,也没 Void/Gentoo 高级,当然反过来说,也是个挺好玩的发行版;
-
Fedora/openSUSE 的 spec 单文件派以及 Debian/Ubuntu 的 debian/* 一大坨派,从普通开发者角度看,其实都不太讨喜,但前者有商业撑腰,后者有社区撑腰,依然红的发紫,只是使用而不做发行版二次开发的话,还是强力推荐 Debian 的;
-
几个 BSD 的 ports 里,FreeBSD 和 OpenBSD 比较简洁,NetBSD 的 pkgsrc 比较复杂,但个人不太喜欢用 Makefile 来做软件打包脚本,还是 Bash、Python 这种普通脚本语言更直白点。