Q: What does “Galeb” mean?

A: “Seagull”.

Q: How do you pronounce it?

A: [gɑ:leb].

Q: Is this Linux? GNU/Linux? Something else?

A: Kernel = Linux. libc = musl-libc. coreutils = suckless core. Init system = suckless init. Process supervisor = suckless svc, heavily modified by me. The rest are GNU or other utilities which weren't covered by the above. Thus, “suckless/musl/Linux”, or “musl/Linux”. It is not wrong to throw GNU in the name as well, but this system is definitely different than something like Debian, Fedora or Ubuntu.

Q: How do I install this thing?

A: By reading files in this repository and typing commands.

Q: What if I don't want to read and/or type commands?

A: Go back to “ricing” Ubuntu. Nothing to see here.

Q: Halp! This doesn't work! How to fix?

A: RTFM. Search the Web. Apply logic. Otherwise, see above.

Q: No thanks, I will instead go back to another distro or Windoze. But won't that hurt your business?

A: What business? Use whatever software you like, or don't, it's up to you.

Q: How to boot? There's no GRUB!


Q: How do I activate wireless?

A: Read the file WIRELESS.

Q: How do I install a package?

A: cd / && xz -dc /pkg/some_pkg.tar.xz | tar -xf -
or use mkpk(8):
mkpk install some_pkg
(when there is a tarball in /pkg).

Q: How do I uninstall a package?

A: cd / && xz -dc /pkg/some_pkg.tar.xz | tar -tf - |
while IFS= read -r file; do rm -- "$file"; done
or use mkpk(8):
mkpk uninstall some_pkg
Remove unwanted empty directories manually.

Q: How do I find a package the $file belongs to?

A: for pkg in /pkg/*.tar.xz; do if xz -dc $pkg | tar -tf - |
grep "$file" >/dev/null; then echo $pkg; fi; done

Q: What license applies here?

A: License for each individual program is its own. License for files in this repository is GPLv3, unless otherwise noted.

musl-libc is licensed under the Expat (“MIT”) license, which doesn't restrict statically linking non-copylefted software.

In contrast, glibc (not used here) is mainly licensed under the LGPL v2.1+, which requires software using it to provide means for it to be potentially combined with modified versions of glibc (eg. have *.o files and makefiles or just full source code available1).

Scripts used to build the binary form of Galeb are publicly available, and they use publicly available source code for all the constituent parts, so the requirements of GPL and LGPL are satisfied. Anyone can create modified versions of those scripts and the software they operate on according to their respective licenses. Furthermore, Expat license is considered compatible with the GPL by the FSF.2

Since some of the goals of Galeb are simplification and minimalism as much as comfortably possible, musl-libc was chosen over glibc, even if glibc has a stricter (and thus ultimately better for all the users) license. Refer to 3.

Q: Why is /usr a link to /, instead of /bin being a link to /usr/bin etc?

A: Galeb doesn't follow FHS. Instead, it builds on https://sta.li/filesystem/

/ - the root home
/bin - all executables
/sbin -> /bin # softlink pointing to /bin
/boot - all boot files
/etc - system configuration
/home - user directories
/var - spool, run, log, cache
/share - man pages, locales, dependencies
/include - include/headers
/lib - static libraries for building stuff
/mnt - mount points
/usr -> / # softlink pointing to /

Based on the Linux assumption:

/dev - devices
/proc - proc files
/sys - sys files

For crap stuff:

/sucks - stuff that sucks, like ugly gnu library dependencies, or systemd fake handlers

The differences in Galeb are:

  • Things in /sucks also include:

    • All programs which are not designed to be linked statically,
    • Programs I couldn't easily configure to be statically compiled yet (eg. Perl) - that could change over time,
    • Programs which in my opinion suck.
  • There is also /local serving the purpose of /usr/local.

  • /var/run is a symlink to /run tmpfs.

  • There is also user-writeable /tmp tmpfs.

  • Package sources and related files are in /src.

  • Legal documents (licenses) are in /share/legal.

  • Compiled packages are in /pkg.

  • 9base is in /plan9.

Q: Why not use fakechroot + fakeroot + chroot instead of writing a convoluted shell script which requires root access? I don't want to use that!

A: Quoting man fakechroot:

- Every command executed within fakechroot needs to be linked to the same version of the dynamic linker from real environment. If the libraries in chroot are not compatible, try to use "--use-system-libs" option.

- Statically linked binaries doesn't
[sic!] work, especially ldconfig(8), so you have to wrap this command with dummy version and set the proper "FAKECHROOT_CMD_SUBST" environment variable.

Obviously, for both reasons, this combination can't be used here.

After the first boot, a packaging system mkpk(8) is used to build and install packages. It uses PRoot to obtain root access necessary to create package tarballs.

You are correct to be concerned about running unknown scripts as root. That's why you should always inspect any scripts before running them (especially as root). You are expected to at least set your username in lib/env.sh before running bootstrap scripts.

Q: Why use OpenSSL instead of BearSSL?

A: Python doesn't support it yet (apparently?):

Q: Why not use scron (simple cron) instead of dcron?

A: Because it doesn't support per-user crontabs.

Q: Why not use heirloom vi/ex?

A: Unfortunately, heirloom vi gives “Out of memory - too many lines in file”: https://github.com/n-t-roff/heirloom-ex-vi/issues/3

Q: Why not use vis instead of vim?

A: It didn't work well in tty under tmux. It only “works” (to a degree – with visual artefacts when moving through a file) with tmux-256color (and tty is normally in 16 color mode), crashes with other TERM settings. I might bring vis back instead of vim if I or its authors figure out how to fix it.

Q: Why isn't there a graphical login and GNOME/Plasma etc?

A: Surely you jest… … … No? Alright – because they are against the fundamental principles behind Galeb.

If you give it a bit of thought, there is no reason at all for the existence of graphical login programs (also called display managers, DMs) when there is already getty. Even as eye candy, the only time one is looking at a display manager is when not logged in.

Q: Can you add FOO as a package?

A: When I created Galeb, I made my own choice of initial packages. You are free to add whatever you like. Some of my choices regarding packages not being included are deliberate.

Q: Why is the startup so slow?

A: When booting from USB flash, this is a known consequence of a slow medium, and not specific to Galeb. What is also slowing up boot is customized smdev, which is made to do work comparable to udev on startup. If this bothers you, and you don't need device links and nodes created on boot, edit /bin/rc.init.

Startup speed is irrelevant anyway. Unix-like systems are designed to be robust and rarely need a reboot, unlike some other operating systems.

Q: Why are some manpages showing some characters as weird question marks?

A: Because the default console font, LatArCyrHeb-16, doesn't have some Unicode characters. Use a console font with a different selection of characters, for example

1. https://www.gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic

2. https://www.gnu.org/licenses/license-list.html#Expat

3. https://www.etalabs.net/compare_libcs.html

Generated by slweb © 2020-2023 Strahinya Radich.