One aspect of Guix I found to be really fascinating: That there is basically no conceptual difference between defining a package as a private build script, and using a package as part of the system.

Let me explain: Say you wrote a little program in Python which uses a C library (or a Rust library with C ABI) which is in the distribution. Then, in Guix you would put that librarie’s name and needed version into a manifest.scm file which lists your dependency, and makes it available if you run guix shell in that folder. It does not matter whether you run the full Guix System, or just use Guix as s package manager.

Now, if you want to install your little python program as part of your system, you’ll write an install script or package definition, which is nothing else than a litle piece of Scheme code which contains the name of your program, your dependency, and the information needed to call python’s build tool.

The thing is that the only thing which is different between your local package and a distributed package in Guix is that distributed packages are package definitions hosted in public git repos, called ‘channels’. So, if you put your package’s source into a github or codeberg repo, and the package definition into another repo, you now have published a package which is a part of Guix (in your own channel). Anybody who wants to install and run your package just needs your channel’s URL and the packages name. It is a fully decentral system.

In short, in Guix you have built-in something like Arch’s AUR, just in a much more elegant and clean manner - and in a fully decentralized way.

      • AUR has centralized control. You have to have an account to post packages. When malicious software is found in AUR (as it was recently), the packages can be removed and the user who submitted them, banned (in the recent case, two packages were submitted by the same contributor).

        The OP article compares the GUIX distribution mechanism to AUR. What they described is decentralized and distributed. It’s less like AUR than it is like having people run wget https://url.com/install.sh | bash.

        • Shareni@programming.dev
          link
          fedilink
          arrow-up
          3
          ·
          edit-2
          18 hours ago

          Guix channels are just git repos with lists of package definitions. You need to manually add non-official repos, and all git contribution controls apply.

          Edit: non-official repos are closer to Ubuntu PPA-s. Don’t really see how they relate to AUR apart from being user generated.