+-------------------------------------+ | ;;;;;;;;;;;;;| | XORG ;\;;;\\;;;|;;| | ;\\;;|;|;;||| | ;'| ' ;|| | .---. | | | || |;;; [ ] ;;@ | | ' || |@;@;; | X | ;@;;;;_/ | \| |;;;@;;@ | | ;;;;;;@/ /;;\ | +-------------------------------------+ Subject KISS LINUX From Dylan Araps <email@example.com> Date Sun, 11 Jul 2020 15:00:00 +0100 Hello, Exactly two weeks have passed since my return to the development of KISS. In this time period, I have made a collective 600+ commits to the project. KISS has also moved from LibreSSL to OpenSSL and from Xorg to Wayland. The purpose of this blog post is to highlight the changes. The move to Wayland was always planned, it was just not possible at the time KISS was created. The ability to compile Firefox in a wayland-only environment is a relatively new development for example. I understand if some users are unhappy - this is a non-issue. Users are free to continue to use Xorg and LibreSSL, the official repositories will simply no longer provide them (see #/faq#3.0). This post will be in bullet form (in non-exhaustive, changelog-like fashion) Check the git commit logs for a full list of changes. If you have any questions, or issues do not hesitate to get in touch (see #/contact) :). The distribution ________________________________________________________________________________ * As stated in previous posts, development will continue as normal from now on. The official KISS Linux website is https://kisslinux.org and development is at its original location on GitHub ($/kisslinux). * The IRC channel and subreddit will remain community operated (and are therefore unaffiliated with the project). My focus will be solely on development (what I love). I can be reached via #/contact * The community repository ($/kisslinux/community) will not reopen. KISS will simply provide a small, extensible base for users. I want to instead foster the growth of the community and the ecosystem of repositories/ideas *outside* of the project (rather than shoehorning users into a set of rigid ideals). OpenSSL ________________________________________________________________________________ * Python 3.10+ drops support for LibreSSL (and all other "alternative") SSL libraries (BoringSSL, older versions of OpenSSL, etc). This extends beyond just the _ssl module as Python also makes use of the libcrypto library. - https://www.python.org/dev/peps/pep-0644/ - https://lwn.net/Articles/841685/ - https://lwn.net/Articles/841664/ - https://discuss.python.org/t/pep-644-require-openssl-1-1-or-newer/5584 * NodeJS now uses the system's SSL library rather than bundling its own. NodeJS does not support LibreSSL so it would compile its own OpenSSL and statically link it. Expect a reduction in package size and compilation times. * LibreSSL breaks ABI biannually which causes some short-term pain downstream as many packages need rebuilds. OpenSSL does not break ABI as often. - https://abi-laboratory.pro/?view=timeline&l=libressl - https://abi-laboratory.pro/?view=timeline&l=openssl * I was never comfortable with patches touching SSL code to fix incompatibilities between LibreSSL and OpenSSL. I can not be sure that the patches are actually /correct/ and do not introduce issues of their own. Wayland ________________________________________________________________________________ * The KISS Wayland environment is entirely free from Xorg (other than xkbcommon and xkeyboard-config which were adopted also by wayland). Basically, we have a full wayland environment with firefox (VAAPI, etc) and /no/ Xorg. * This environment is still free from dbus, polkit, (e)logind, pulseaudio, etc and is fully functional without them (yes, sound works in the latest Firefox with alsa). Wayland is not a pathway towards their inclusion. * The KISS wiki has been updated with initial Wayland pages. I expect this to improve over time as contributions are made by myself and other users. See #/wiki/wayland * The NVIDIA issues with Wayland are not applicable here as proprietary software is unsupported by KISS. Regardless, the proprietary drivers do not run under musl (nouveau works fine however). * Firefox (as of this post) requires patches to achieve a full Xorg-less build. The patches are more or less just some #ifdefs and the issue is being worked on upstream. https://bugzilla.mozilla.org/show_bug.cgi?id=1661450 * GTK+3 on Wayland requires schema files for gsettings to function (under Xorg it makes use of Xresources). The GTK+3 package has been updated to fix this issue. This is the cause of the notorious hand2 issue plaguing many Firefox users on Wayland. https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=253742 * Sway is the default display server and comes in three flavours. 1. 'sway': The package as upstream intended. Requires the 'seatd' daemon to function - comes with all the bells and whistles. 2. 'sway-no-seat': No seat daemon requirement whatsoever. Rootless in the same fashion as our xorg-server was (user in video group only, server setgid input). Otherwise identical to 'sway'. 3. 'sway-tiny': 'sway-no-seat' plus removal of additional dependencies on pango, cairo, json-c and pcre. Provides only the sway binary. This is a fork of sway for KISS so refrain from sending bug reports upstream. * Foot is the default terminal emulator and comes in two flavours. The regular 'foot' package and a 'foot-pgo' package which does profile guided optimizations inside a running wayland session. Repository Highlights ________________________________________________________________________________ * The fribidi package has been removed from the repositories. I have patched its usage out of firefox, libass, pango and gtk+3. It is no longer needed by anything. * Portability improvements to build files including full removal of non-standard 'sed -i' usage and full removal of UNIX 'install' usage. * Reduced the size of the ncurses package from 14MB to 3MB by providing a custom, trimmed-down terminfo database. * The 'mtdev' and 'libevdev' packages have been removed from the repositories and are instead vendored in the 'libinput' package. The 'libevdev' dependency has also been patched out of sway. Package Manager Changes ________________________________________________________________________________ * Simplified library path resolution in pkg_fix_deps(). * Fixed confirmation prompt being skipped if packages were downgraded to dependencies after resolution. * Added detection for circular dependencies. The package manager now aborts with an error instead of crashing and burning. * Fixed packages not being installed in the right order during updates. * Removal of packages now includes broken directory symlinks. These were previously skipped as their (safe) removal was tricky. The package manager now queues all non-top-level directory symlinks and removes them at the end of the process (but only if broken). * kiss-chroot now mounts /dev/shm, /dev/pts, /tmp and /run. * Fixed many issues with how paths were being used internally. The package manager now ensures that any paths it joins together don't result in '//' and don't end in (any number of) '/'. * Git clones are now use --filter=tree:0 instead of --depth=1 to allow usage of 'git describe' which doesn't work with shallow clones. In other words, a less shallow clone is now done to obtain slightly more information. * Removed many instances of unneeded function calls. The package manager would look for repository files when unneeded (caller has the same information for example). * Fixed handling of duplicate packages given to 'kiss b'. Duplicates are now correctly filtered out and the total package count includes any filtering. * The package manager now shows you which packages are explicit (passed on the command-line) or implicit (dependencies). You can now also see if any explicit packages were downgraded to implicit. * Empty repositories (KISS_PATH=:::: (multiple colons in a row)) are now correctly handled by the package manager. * Fixed issue where the package manager would randomly drop the wrong packages from its build queue. * as_root() is now bypassed if the user is already root and the destination user is also root (root -> root). * All applicable arguments to the package manager are now sorted by dependence. This ensures the same order is passed to functions regardless of input. * Removed many uses of cd, subshells and pipes which were unnecessary. There /should/ be a performance increase here. * Fixed rare global variable conflict between pkg_build and pkg_list. * kiss-chroot now displays every command it executes. * Arguments to the package manager now undergo stricter validation to prevent invalid input. This will be further extended in the future. * When a package is missing files referenced in its manifest, the package manager will now show all missing files rather than just the first one. * Checksum verification has been rewritten to remove awk, pipes and subshells. This also fixed a rare bug where checksums with mismatched lines would always be considered a match. * The checksum verification changes also open a pathway to supporting multiple checksum types in the future (in a non-breaking way). Blake3 is something I am very interested in. * Handling of sources has been rewritten with path finding logic unified for use throughout the package manager (instead of being duplicated). * Fixed bug with tar extraction which collapsed nested directories of the same name (fcft/fcft -> fcft). The package manager now skips directories it has seen before (which also improves performance with large tarballs). * Fixed bug during package installation where a failed 'cp' of metadata could cause the previous package's manifest to bleed into other packages in the queue. Very bad in other words. * The package manager will now take KISS_COMPRESS into account when pulling binaries out of the cache. If not found, a glob is used (old behavior). * Added pre-remove user hook. * Exposed build queue numbers to user hooks. * Fixed bug where insufficient permissions to the log directory would cause confusing behavior on build completion. * The kiss-help utility now does a search when it cannot find a page by its relative path. This means that 'kiss help wiki/software/firefox' and 'kiss help firefox' result in the same page being opened. The Future ________________________________________________________________________________ * The next major change planned for the future is manual page consistency. All packages will provide manual pages by default and this will be configurable by users (per manual page, per package, etc). $/kisslinux/repo/issues/273 * Support for additional checksum types /may/ be added. Early numbers using blake3 show an immense runtime improvement over sha256 for medium to large tarballs. * LLVM/Clang should become first class citizens and the repositories should be fully functional when compiled with them. Users should have the option between the two (though installation tarballs will continue to use GCC). * GCC will eventually include a rust codegen backend (and quite possibly a rust frontend). These will be interesting to play around with once they become usable. * The C package manager implementation is still in the works though its development process has changed. A library will be created and slowly over time individual components of the shell package manager will be replaced with C equivalents (while the library matures at the same time). Users will be able to opt-in to running parts of the package manager (the slow components especially) in C. This allows users to benefit from faster implementations of components as they become available. Once the library reaches a good level of usability, a full C package manager implementation will be made available alongside the shell implementation. A test-suite will also be created and will be used both by the shell and C package manager implementations to ensure that no regressions are made between changes. * BearSSL is very interesting and I have experimented with a full bearssl system (to the extent it is possible). A lot of work in this area is being done by Michael Forney (including the support in curl, openssh, and possibly python in the future). Closing words ________________________________________________________________________________ It's good to be back doing what I love. I am very excited for the future and I hope you are too. Stay tuned for more updates. :) Dylan PS On another note, I will begin writing regular blog posts to my personal domain (https://dy1an.xyz/) about KISS, technology and whatever else interests me. If it tickles your fancy, check it out.