Είμαστε τυχεροί σήμερα να έχουμε απεριόριστες επιλογές για την διανομή/distro που προτιμάμε να βάλουμε στο μηχάνημα μας. Είμαστε άτυχοι στο γεγονός ότι το 99% από τις επιλογές που έχουμε είναι preconfiguration από Debian/Arch/Fedora.
Δεν υπάρχουν διανομές σήμερα που λύνουν κοινά προβλήματα που έχουν οι παραπάνω διανομές, απλά παίρνουν τα από πάνω ως βάση και προσφέρουν αισθητικές αλλαγές, ή ένα πιο εύκολο installation process, ή καβγάδες για τα init systems.
Και εδώ έρχεται το θέμα μας σήμερα, μια διανομή που βρήκα που μου άλλαξε την γνώμη μου για αυτήν την σημερινή linux δυστοπία, μια διανομή που θα σου αλλάξει το τρόπο που βλέπεις το σύστημα σου, το Guix. Τι προσφέρει όμως το Guix που οι παραπάνω 3 διανομές δεν προσφέρουν?
Το Guix πρώτα από όλα είναι ένα system configuration tool, σου δίνει την δυνατότητα να κατεβάζεις προγράμματα αλλά και ενα ΟΛΟΚΛΗΡΟ GNU/Linux περιβάλλον!
Για να είμαι πιο σωστός, θα πρέπει να πω πως είναι ένα functional package manager, όπως το Νix
Αυτο το “functional” μοντέλο του σιγουρεύει ότι ο,τι αλλαγές κάνεις στο configuration/διαμόρφωση συστήματος σου θα έχει το ίδιο αποτέλεσμα άμα το το βάλεις στο νέο σύστημα (περισσότερα σε αυτό σε λίγο) με την δυνατότητα να γυρίσεις “πίσω” το σύστημα σου άμα κάνεις “χαζομάρα”, κάτι που το κάνει ιδανικό ακόμα και για αρχάριους.
Δεν θα γινόταν να μιλήσω για Guix, χωρίς να αναφέρω την ιδεολογία από πίσω του. Το Guix είναι προτζεκτ του Free Software Foundation, σε αντίθεση με τις διανομές από πάνω, έρχεται μόνο με λογισμικό που σέβεται τα δικαιώματα του χρήστη. Δεν θα βρεις spyware ή proprietary software εδώ. Είναι μια διανομή που ΠΡΑΓΜΑΤΙΚΑ σέβεται την ελευθερία σου.
Πώς ακριβώς όμως λειτουργεί?
Στο Guix όταν κατεβάζεις λογισμικό, δεν πηγαίνει στο /bin
όπως σε άλλες διανομές. Χρησιμοποιεί το /gnu/store
όπου μόνο o guix daemon εχει write access, και τα συνδέει με διαφορετικά profiles
Σε updates/αλλαγές κάνει νέα προφιλ, και έχεις την δυνατότητα να κάνεις roll-back το σύστημα σου σε παλιό προφιλ, άμα κατι πάει στραβα.
Κάτι που το κάνει ΙΔΑΝΙΚΟ ακόμα και για αρχάριους.
Στο Guix μπορείς να κατεβάζεις λογισμίκο μόνο για συγκεκριμένους users και όχι για όλο το σύστημα επίσης. Για να κατεβάσεις λογισμικό απλά τρέχεις
guix install <your-desired-software-εδω>
προσθέτεις sudo άμα το θες system wide, αλλά η μαγεία γίνεται αλλιώς. Μπορείς να γράψεις πως ακριβώς θες το συστημα σου με guile scheme!
Ας δούμε ένα απλό παράδειγμα:
;; Εδω βλέπουμε ένα απλό configuration
;; Βγαίνει αυτόματα απο το graphical installer
(use-modules (gnu) (nongnu packages linux))
(use-service-modules cups desktop networking ssh xorg)
;; Εχεις την επιλογή να διαλέξεις τι kernel θες
;; αλλά και firmware
;; Το σωστό θα ήταν να βάλεις linux-libre
;; Αλλά λόγω περιορισμένου hardware πολλοί χρειάζονται το non-free kernel
(operating-system
(kernel linux)
(firmware (list linux-firmware))
;; Εδω μπόρεις να βάλεις το ελληνικό locale επισης
(locale "en_US.utf8")
;; Θέτεις την ώρα
(timezone "Europe/Athens")
;; Εδω βάζω πως θέλω το πληκτρολόγιο μου
;; Πάντα αλλάζω το ctrl με caps
(keyboard-layout (keyboard-layout "us"
#:options
'("ctrl:nocaps")))
;; Βάζεις το όνομα του συστήματος
(host-name "guix-linuxforumGR")
;; Εδώ βάζεις τους users.
(users (cons* (user-account
(name "apollo")
(comment "Apollo")
(group "users")
(home-directory "/home/apollo")
(supplementary-groups '("wheel" "netdev" "audio" "video")))
%base-user-accounts))
;; Εδώ βάζουμε το λογισμικό που θέλουμε να βάλουμε σε όλους τους users
;; Εγώ τρέχω κυριώς exwm, αλλα εδώ μπορείς να βάλεις ότι θες. 'Οπως
;; Firefox, picom, python, flatpak κτλπ
(packages (append (map specification->package
`("emacs-exwm"
"emacs-desktop-environment"
"xrandr"
"qtile"
"alacritty"
"alsa-utils"
"bluez-alsa"
"emacs-vterm"
"emacs-multi-vterm"
"git"))
%base-packages))
;; Εδω βάζουμε τα services που θέλουμε να τρέχουνε
(services
(append (list (service gnome-desktop-service-type)
(service openssh-service-type)
;; Βαζούμε το bluetooth σε auto-enable
(bluetooth-service #:auto-enable?
#t)
;;Libvirt για vms
(service libvirt-service-type
(libvirt-configuration
(unix-sock-group "libvirt")
(tls-port "16555")))
(service cups-service-type)
(set-xorg-configuration
(xorg-configuration (keyboard-layout keyboard-layout))))
;; Αυτη τη λίστα την βάζουμε
;; στο:
%desktop-services))))
;; Εδω βάζεις την λίστα με το file system σου
;; το UUID το παίρνεις με την εντολή blkid στο terminal
(file-systems (cons* (file-system
(mount-point "/boot/efi")
(device (uuid "021E-83B3"
'fat32))
(type "vfat"))
(file-system
(mount-point "/")
(device (uuid
"your--uuid"
'ext4))
(type "ext4")) %base-file-systems)))
Οι περιορισμοί για το τι μπορείς να κάνεις με το config σου περιορίζονται μόνο από την φαντασία σου.
Το game changer είναι ότι μπορείς να πάρεις το config που έχεις ήδη χτίσει, να το βάλεις σε νέο hardware και να έχεις το ίδιο ακριβώς σύστημα! ή απλα να έχεις ένα git repo να κανεις sync το σύστημα σου σε διαφορετικά μηχανήματα.
Επίσης το guix σε σύγκριση με άλλες διανομές, έχει απίστευτα καλό documentation
Official website
Eχει ένα πολύ καλα γραμμένο manual
Αλλά επίσης ενα ύπεροχο cookbook οπου θα βρεις real-life examples και χρήσεις του guix, μαζί με οδηγίες για το πως να μαθεις scheme
Side-note:
Σαν κοινότητα του Linux, ιδιαίτερα εδώ που βλέπω πολλούς αρχαρίους, θα πρέπει να τους μάθουμε για λογισμικά που σέβονται την ελευθερία τους και κάνουν την ζωή τους πιο εύκολη. Να τους μιλάμε για τις αξίες από copyleft licenses οπως το GPL3, και όχι για π.χ systemD vs systemE όπως έβλεπα να γίνεται .