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