GoboLinux is a [[GPLv2]] (presumably) licensed [[Linux Distro]] written in [[Bash - Unix Shell]], [[Lua]], [[Python]], and [[C]]. - [Website](https://gobolinux.org/) - [Source](https://github.com/gobolinux) - [Documentation](https://wiki.gobolinux.org/) - [DistroWatch](https://distrowatch.com/table.php?distribution=gobo) > GoboLinux is a modular Linux distribution: it organizes the programs in your system in a new, logical way. Instead of having parts of a program thrown at /usr/bin, other parts at /etc and yet more parts thrown at /usr/share/something/or/another, each program gets its own directory tree, keeping them all neatly separated and allowing you to see everything that's installed in the system and which files belong to which programs in a simple and obvious way. # Notability 1. Restructures the classic [[Unix]] directories into something more modern. 2. Stores packages in files and links them to their destination instead of moving them, allowing multiple versions and conflicting files to be able to live in harmony. 3. Interesting [[#Compile|tools]] to quickly create new packages directly from URLs. 4. A [[#Aliens|subsystem]] for managing external packages, such as those from [[Rubygems]] and [[CPAN]]. # Philosophy ## Dormancy It seems that Gobo's developers primarily use it on its own and update formulae locally, rarely pushing updates to the public repository which is really frustrating. # Platform Support # Features ## Compile - https://github.com/gobolinux/Compile ## Formulae Also called "recipes", confusingly. Formula files are very simple, but each file has its own syntax and doesn't seem to resemble any particular configuration language. ### Recipe File The actual `Recipe` file uses a simple key-value format with hash comments that looks very much like TOML, except that it uses whitespace-delimited items in parens for arrays instead of comma-delimited items in square brackets. Example from Readline formula: ```toml # Recipe for version 8.2 by Sage I. Hendricks <[email protected]>, on Thu 28 Mar 2024 09:22:00 AM EDT # Recipe (MakeRecipe) for Readline by Peter Eriksen <[email protected]>, on Thu Nov 4 19:52:54 CET 2004 compile_version=1.13.2 url="https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz" file_size=3043952 file_md5=4aa1b31be779e6b84f9a96cb66bc50f6 recipe_type=configure build_variables=( "SHLIB_LIBS=-lncurses" ) ``` ### Build Information File - https://wiki.gobolinux.org/Recipes/Recipe-Format-Specification/#builddependencies A list of libraries that the package links to is stored in the `BuildInformation` file. Not sure if this is actually used by the package system? Possibly the output of `ldd`? Example from Readline formula: ```toml Glibc 2.30 ``` ### Dependencies File - https://wiki.gobolinux.org/Recipes/Recipe-Format-Specification/#dependencies A list of *runtime* dependencies is stored in the `Dependencies` file. Uses a custom syntax that can be very powerful, including multiple version ranges, external packager dependencies, and build flags. Example from Readline formula: ```toml Ncurses >= 6.2 # wide char support ``` Example from Thunar 1.4.0: ```toml DBus >= 0.34 [dbus] DBus-GLib >= 0.34 [dbus] Desktop-File-Utils 0.10 EXO 0.8.0 Gamin >= 0.1.0 [gamin] | FAM [fam] GConf >= 2.4.0 [gconf] GLib >= 2.18.0 GTK+ >= 2.14.0 JPEG >= 6b LibPNG >= 1.2.0 LibExif >= 0.6.0 XFCE4-Panel >= 4.6.0 | LibXFCE4Panel >= 4.3.90 LibXFCE4Util >= 4.6.0 PCRE >= 6.0 Shared-MIME-info 0.15 Startup-Notification >= 0.4 [startup_notification] ZLib 1.2.3 ``` ### Build Dependencies File A lot of build-time dependencies is stored in the `BuildDependencies` file. Uses the same syntax as the [[#Dependencies File]]. Example from Thunar 1.4.0: ```toml GTK-Doc >= 1.0 [doc] Intltool >= 0.31 LibTool Perl >= 5.0 Pkgconfig >= 0.9.0 ``` ### Description File A *different* sort of key-value file, presumably for displaying info to the user when searching for or installing packages. ```toml [Name] readline [Summary] The Readline Library [License] GNU General Public License (GPL) [Description] The readline library is used by the Bourne Again Shell (bash, the standard comand interpreter) for easy editing of command lines. This includes history and search functionality. [Suse Category] System/Libraries [Homepage] http://www.gnu.org/software/bash/bash.html ``` ## Aliens Aliens is a packaging subsystem that wraps around [[Rubygems]], [[CPAN]], [[LuaRocks]], and [[Pip]] to manage programming language dependencies with their own package manager. ## Use Flags Similar to [[Gentoo]]'s Use Flags system. - https://wiki.gobolinux.org/Recipes/Use-flags/ # Tips # References - https://www.gobolinux.org/index.php?page=at_a_glance