| 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 这种普通脚本语言更直白点。