Meta(
    title: "EasyOS: revisiting my past",
    summary: Some("Revisiting my first distro (sort of)"),
    published: Some(Time(
        year: 2022,
        month: 10,
        day: 6,
        hour: 5,
        minute: 2,
        second: 25,
    )),
    tags: [
        "linux",
        "easyos",
    ],
)
---
In the process of hacking on HitchHiker, I wanted to get my little system installed onto a second system. My backup laptop was set up years ago with a single partition unfortunately, so this required some futzing around with moving partitions.

Years ago, back when I was new to Linux, I used to be quite active with Puppy Linux. The first version I used was 1.0.2, which was only marginally smaller than Damn Small Linux at the time, somewhere around 50mb, and yet had all of the bases covered for most people's day to day needs using a computer. I began using it as my daily driver somewhere around 1.0.3-1.0.4, can't remember which, and got involved a bit with development for a few years. It's still my go-to distro when I need a live system to do some repair or whatnot.

That said, I moved on long ago to operating systems that one might consider much less user friendly, and I haven't kept up with Puppy much since it was turned over to the community. When I checked in, it appeared to me that while there are still releases ongoing the project is a bit stagnant as far as delivering any kind of new ideas. But the original creator, Barry Kauler, never seems short on ideas. As it turns out, he couldn't quite stay retired completely and is now regularly releasing EasyOS, which seems to me to be very much a spiritual successor to the original project. So that's what I downloaded.

Now running Arch for a number of years I'm used to having the latest software on my system. That includes not only applications but also libraries. As such, a number of my current projects use quite modern parts of the Gnome stack. Eva, Gfret, Vapad and OxTerm all use gtk4, and the next branch of Gfret is using some of the most recently added features of libadwaita. That's cool and all, but I'm currently experiencing issues getting -any- gtk4 applications to play nice in HitchHiker, leading to a certain disillusionment on my part.

Nor is my disillusionment completely confined to gtk4. When I started Zterm, it was basically undertaken to fulfill my own wants and needs in a terminal emulator. I wanted both tabs and split panes, while keeping the amount of user interface to a minimum. That is to say as few buttons and menus as possible. I've been mostly happy with how it worked out, but the light bindings I created to gtk3 for Zig are deficient in a few key areas, which limits the project in a few key areas. Most notably, due to some design choices made early on Zterm is limited to a single window open at a time. That was one strike against it, but with Zig pushing closer to it's self hosted compiler I've had to fix a lot of issues as they arise due to changes in the compiler. It's currently compiling on Arch again, but there's a bug which hasn't been addressed yet and is likely to remain in Zig for a while. When linking to system libraries, if any of your libraries are placed anywhere other than /usr/lib the compiler gets confused and generates an incorrect linker command, attempting to link to the static versions of certain libraries without including any of their dependencies. So that means that Zterm requires manual linking on FreeBSD and HitchHiker, and likely also on OpenBSD and NetBSD too. Ouch.

OxTerm was undertaken as a way forward for Zterm, but in addition to some of my already stated issues with gtk4 the gtk4 port of libvte still hasn't achieved feature parity in a couple of areas. I have all of the code in place to be able to set gradient or image backgrounds but none of it works yet. F*$k me..

So yeah, I've been playing around a bit in EasyOS. Got my partitions moved, and got HitchHiker installed as a second boot option. Moved /home into it's own partition. That's all hunky dory. And HitchHiker on that laptop is running kernel 6.0 and compiling packages from 2022q3 pkgsrc. And EasyOS, well I guess I better get to EasyOS at some point, since that's what this blog post is supposed to be about, right? Shit, my brain is like a gnarled old apple tree growing against the side of a dilapidated barn.

EasyOS is great in a lot of ways. It's a breath of fresh air in that I'm setting things up by pointing and clicking with a mouse rather than editing files. Puppy always had this amazingly eclectic set of configuration wizards, but EasyOS has an actual control panel which groups them all together. My muscle memory is getting thrown off because they have the WindowManager set up to use Alt/number to switch desktops, and I'm completely used to using that combination to switch tabs in every program which supports tabs, but I haven't decided to change it yet. I'm also making do with Geany as an editor rather than my beloved NeoVim, but it's got an attached terminal at the bottom at least and a lot of other little helpful things including a great search interface.

I do like to give back when and where I can, so I started poking around on the forum and reading Barry K's development blog a big. It seems that he's been kicking the tires with programming in Nim, and even included the Nim toolchain in the latest devx squashfile they use for development in Easy. I've kicked the tires in Nim a little myself and had a pretty good experience with it when I did (see my slt project). The code is about as concise as you can get and it transpiles to C, so runting speed is pretty great. Syntax is really close to Python, and if you like OO programming it's pretty well suited to it. You get your choice of a couple different garbage collection schemes, or manual memory management if you're a sadist, so you can go full on easy mode if you like.

Anyway, I've started working on a terminal emulator with tabs and panes written in Nim just for Puppy/EasyOS. I don't know how far I'm going to pursue it, but I'm having fun. I'm also trying to pass on what I'm learning on their forum. This is using Gtk3 and so isn't butting up against any of my issues with gtk4. I'm liking Nim. It's a seriously easy language to pick up. My only complaints are only because Rust has spoiled me so much, what with it's overly informative compiler error messages and great documentation. But a lot of that isn't really even needed because having used Gtk+ in C, Rust, Zig and Vala I know the interface pretty well already so it takes a lot of the guesswork out. The bindings (Gintro is the package name) are very complete and pretty idiomatic.

Now I'm not planning to switch to EasyOS as my daily driver any time soon (read: never) because I'm quite comfortable taking a more low level view of my OS. But in my poking around what I have (re)discovered is that if I was ever going to recommend a distro to a total newbie coming from Windows this is that distro. Everything is discoverable just by clicking around and exploring. And Nim is a perfect complement for development on such a platform.

=> https://easyos.org/
=> https://nim-lang.org/
=> https://github.com/StefanSalewski/gintro Gintro Gtk+-3.0 bindings for Nim
=> https://codeberg.org/jeang3nie/slt Slt - a sine lookup table generator in multiple languages
=> https://codeberg.org/jeang3nie/pterm Pterm - my little playground for Gtk+ and Nim