I keep reading that people think a person should not attempt to create a new Linux distribution unless it's truly unique from all the other distributions already out there. I have been searching and searching for a Linux distribution that meets my wish list of what I'd want and I have yet to find it. So, I finally stopped, examined what I really wanted and wrote down exactly what I'm looking for a distribution.

If there is a Linux distribution that makes all the same choices and has the same goals as this, please let me know. I would love to get involved with the project, volunteer and lend my skills to it. If not, am I truly the only one who would prefer these particular choices? If they appeal to you as well, would you be interested in brainstorming Linux distribution creation ideas? You can reach me on Mastodon if you'd like to discuss this further.


Main Goal: A lightweight Linux and musl based distribution.

Aiming for x86 at this point for use on older machines but that may change.
The choices of software are highly influenced by the ease of building packages completely from source. The project should facilitate users' abilities to patch, modify and rebuild every library and program in the distribution from source code if desired.  Will use the Linux LTS kernel.  Actively avoiding systemd, Wayland, pam, elogind, harfbuzz, ffmpeg and some other complicated projects that fail to do just one thing well.  Avoiding heavyweight GUI libraries such as GTK and Qt.  Using LibreSSL instead of OpenSSL or other SSL libraries.  (See earlier post on SSL libraries for reasons for this choice.) Using pkgconf in place of pkg-config which avoids circular dependencies.  Using bsd-gettext in place of GNU gettext.  Using netbsd-curses and pdcurses in place of ncurses.  Using older X11 kdrive in place of X11libre and Wayland.  Using PicoGL in place of Mesa.  The system will use Busybox for mdev, init, ash and other basic functions.  GNU coreutils are replaced by Busybox and supplemented with other utilities to supply enough functionality to build basic applications.  Other utilities include programs from BSD, Minix 2, sbase, etc.  Compiler is GNU gcc/g++ with musl C library.  Tools such as cmake and meson will be replaced with CDetect and GNU and/or BSD make.  Actively avoiding requiring several programming languages just to build one program. I'm using a custom cross-platform build/package management system that's been field tested for over 20 years.  Using lightweight window manager instead of desktop environment.  Preferred GUI/screen libraries include FLTK, SDL, Raylib/Raygui, otk, pdcurses. Should be console/terminal friendly and users should be able to do useful work or batch programs/processes via the console easily.

Majority of programs in the distribution will be cross-platform portable. So, anyone could run the same programs on different operating systems. One could switch to NetBSD or another operating system including Windows or Mac if necessary and to some extent even FreeDOS and have basically the same programs and functionality available. Software will include enough programs to perform various hobbies with the system such as writing, drawing, music creation, programming, etc.  Games for the system are currently focused on lightweight programs that encourage you to think, popular card and dice games, puzzles, etc.
Here's the next set of packages I'm working on updating. As mentioned before, I build these cross-platform, so they work on Windows using the original MinGW and Linux using musl with gcc. BSD will be another testing option for a future time.

Package List

Category Program Current Version Latest Version
Audio apps waveutils
waveptools
waveproject
vorbisgain
vorbis-tools 1.4.3 1.4.3
sox 14.4.2 14.4.2
shntool 3.0.10 3.0.10
abcmidi 2019.08.11
abcm2ps 8.14.5
declick
soundtouch
bchunk
sfubar
Graphics Apps graphicsmagick 1.3.48 1.3.48
gle
pngphoon
Document Apps diction 1.11 1.11
qpdf 5.1.2 12.4.0
hunspell 1.2.11 1.7.3
sdcv
pdftxt
PIM Apps cal 4.1 4.1
lcal
pcal
Misc qdbm 1.8.78 1.8.78
I've been doing some experiments with WSL. I built an older set of the X11 libraries that doesn't require harfbuzz or libxcb as dependencies. I built them using a musl cross-compiler that creates 32 bit binaries for Linux. I built FLTK with it as well. I'm able to run FLTK GUI applications via WSL. So, the X11 libraries built with musl are capable of talking to WSLg.

It's worth noting that WSL2's 64 bit kernel is capable of running 32 bit ELF binaries. So while many Linux distributions are phasing out 32 bit support, WSL provides a useful platform to continue experimenting with it if desired. Another nice point about WSL is that it can avoid the systemd controversy. While it can be made to work with systemd, it can also use a simple init program or start with /bin/sh if necessary.

It wouldn't be hard to build a WSL distribution at this point. It could also be designed to be completely static or include shared libraries as most Linux distros do. So, a custom distribution would be possible and it would not need to be limited to command line only. It also makes a great testing ground for creating a lightweight Linux distribution that could run natively on older hardware.

WSL has really come a long way from only being able to run command line programs to running X11 apps. The incredible thing is you don't need a specific library such as glibc or specially built Wayland or X11 libraries. It works perfectly well with 32 or 64 bit binaries and a custom built set of X11 libraries. It would make a great environment to custom build a personalized distribution in.
I find it very surprising how few events there are for the 250th 4th of July as compared to the 200th. In 1976, there was an incredible philatelic convention with stamps and a passport. There was a caravan of wagons that came from every state in the country and met in Philadelphia. There were tours of famous areas and even a historical movie being made.

The 250th celebration seems so quiet in comparison. Thought it might be fun to brainstorm some ideas for celebrating it.

One thing I've tried in previous years that was fun was to make your own parade. We got kids from the neighborhood. We decorated their bikes or scooters. They went around the neighborhood with some patriotic music playing. If you're on your own this year, making parade floats using Legos or blocks could be fun.

4th of July always reminds me of ice cream. It might be a great time to create an ice cream social with everyone's choice of ice cream toppings. It may even be more fun if you make your own ice cream with an ice cream maker, high powered blender or try the homemade ice cream in a can method.

It's also a great time for barbecues, cook outs, burgers, hot dots and lemonade. Have to watch what you eat? What about coming up with snacks using healthy red, white and blue vegetables or a red, white and blue salad? I've even seen red, white and blue desserts. You can add blueberries, strawberries, cherries and/or raspberries and yogurt (or ice cream) in layers to a cup or try to recreate the flag design on a cake.

It's fun to deck the house with shiny red, white and blue decorations. Dollar stores or big box retailers might have some inexpensive decor. Craft stores and dollar stores may even have supplies for making your own. Metallic gel markers could create shiny drawings. Potato chip bags often have a silver inside that can be used to cut out decorations. There's a story of how Betsy Ross created the stars for the flag by folding the fabric and making one cut. Shiny paper or silvery potato chip bags could be used to try to make 5 pointed stars that way.

Need a more virtual way to celebrate? How about creating an Indie web page or Pinterest collage for the holiday? How about writing a 4th of July related fan fiction or original story and sharing it online?

The one thing that most embodies celebrating 4th of July for me is fireworks. If you're not near a fireworks display this year, how about checking out a fireworks display virtually? One year, I saw a wonderful display of fireworks photos shared via Zoom. I've seen some simulators for fireworks. Videos of them are available on Youtube. There are some great Open Source fireworks programs. Some were designed for the web and others work on a computer or Android phone. You can also have fun writing your own. Turn it into a challenge and see who comes up with the best fireworks display. My favorite fireworks software is called Xfireworks. It mainly works on X Windows. I coded a compatibility layer using SDL so I could run it on Windows and Android as well.

Does anyone have some crafty or creative ways to celebrate the holiday? Do you have a favorite recipe you can share? Anyone working on a web page, story or program for the holiday? Let me know on Mastodon.

How will you celebrate the 4th of July this year?
I love the concept of PermaComputing especially when it comes to software. Some of the properties it expounds
are accessiblity, compatiblity (able to work across architectures), efficiency, flexibility and resilience (works offline, designed for the long run). Other desirable properites are being able to boostrap and to reproduce builds. More details on permacomputing are available here:
https://permacomputing.net/permacomputing/

I thought it would be nice to have a collection of links to software that might fit the PermaComputing criteria well. Please feel free to contact me via Mastodon or email and suggest any favorite FLOSS that fits PermaComputing principles that I might have missed.


I have a list of lightweight C software at: https://codeberg.org/lmemsm/delightful-c-software

Grumpy Linux is an interesting project that can build a Linux distro from source:
http://tekk.in/grumpy.html

PermaComputing.net's guide to Minimalist Software:
https://permacomputing.net/projects/

Awesome PermaComputing's list of Software Projects:
https://github.com/thisisisa/awesome-permacomputing#software
I've been working on updating my build scripts to the latest versions of certain libraries. It can be a difficult process because, I often use older C/C++ compilers or less popular C runtime libraries and patch to make path handling more portable and build for several target platforms. I typically do a lot of patching and don't follow upstream sources that closely. I sometimes add my own build system in place of the upstream version or patch to fix build issues, security issues or even to add missing features I need.

Once I have a compiler, core utilities and basic build tools in place, I build libraries and programs in these four categories: archive, communications, graphics, audio. After that, I typically build my graphics/GUI libraries. Then, I build applications that use those GUI libraries and my audio and generic cli programs. On Linux, I build X11 libraries before building GUI libraries.

Lets Compare Notes

If anyone would be interested in following along with me as I update my libraries and programs, feel free to contact me: https://fosstodon.org/@lmemsm It would be fun to compare notes on how to build any of these packages and to share patches. I may also consider dropping some libraries or adding new ones to these categories based on what I need to build the applications I want on my system. I will be building these libraries on Windows using the original MinGW and Linux using musl and gcc. I'm considering a build for BSD system, possibly NetBSD, as well.

Here's the status of what I'm updating and how far I am in the process.

Package List

Category Program / Library Current Version Latest Version
Archive libz 1.3.2 1.3.2
bzip2 1.0.8 1.0.8
unzip 6.0 6.0
zip 3.0 3.0
liblzw 0.2 0.2
zstd 1.5.7 1.5.7
bsdgzip 20111009 20111009
libxml2 2.15.3 2.15.3
libarchive 3.8.7 3.8.7
Communications libressl 4.3.2 4.3.2
libssh2 1.11.1 1.11.1
nghttp2 1.69.0 1.69.0
curl 8.17.0 8.20.0
certs 20260602 20260602
putty 0.84 0.84
Graphics libpng 1.6.58 1.6.58
giflib 6.1.3 6.1.3
jpeg 10 10
jbig2dec 0.20 0.20
tiff 4.7.1 4.7.1
freetype 2.13.3 2.14.3
openjpeg 2.5.4 2.5.4
libwebp 1.6.0 1.6.0
lcms2 2.19.1 2.19.1
Audio libogg 1.3.6 1.3.6
libvorbis 1.3.7 1.3.7
flac 1.5.0 1.5.0
speex 1.2.1 1.2.1
opus 1.6.1 1.6.1
opusfile 0.12 0.12
wavpack 5.9.0 5.9.0
libmodplug 0.8.9.0 0.8.9.0
libid3tag 0.15.1b 0.15.1b
libmad 0.15.1b 0.15.1b
mpg123 1.25.12 1.33.5
twolame 0.4.0 0.4.0
libsndfile 1.0.28 1.2.2
libao 1.2.0 1.2.0
libtheora 1.2.0 1.2.0
portaudio 190700_20210406 190700_20210406
With the recent resurgence in using and maintaining legacy software with projects like XLibre and gtk2-ng, I started to rethink my own desktop strategy. Did I want to take the easy route and update a lot of legacy gtk2 software? There certainly are enough choices in software that work with gtk. I did build XLibre (on Debian with musl) and gtk2-ng (on Debian with musl and on Windows with original MinGW) from source. I haven't shared the build scripts for XLibre but I did upload some of my build scripts for gtk2-ng in case they may be of use: https://git.devuan.org/lmemsm/bldgtk After the experience, I found myself wanting a more lightweight alternative even more than before. So what would a more lightweight desktop environment look like? Glad you asked.

First, I should note that a lot of people enjoy collecting software that looks similar and going to great lengths to theme and give their computers a specific look. If that's your interest, check out projects like gtk2-ng and their growing themes collection. That just isn't a high priority for me. My personal preference is for something that's lightweight, with source code that's easy to understand and modify and that does one thing well. I prefer substance to flash. Portability is a priority since I want to use these programs at home or at work and not be locked into a particular operating system. I want applications and libraries on my system that can be understood and maintained by one person. That's especially important to me because I don't have a community to back up what I'm doing.

I maintain a comprehensive, curated list of GUI libraries written in C. I've searched for a GUI library that I would like for many years. I even wrote an article called "In Search of a Portable Screen Library" that appeared in the C/C++ Users Journal back in September, 1996. While I've never found that one elusive GUI I liked, I have found several useful options.

FLTK is pretty much the most lightweight, full featured GUI library I could find. It's not C, it's C++, but it has some nice applications that were created with it. It currently has 4 themes. One I helped to get added after a pen pal did a beautiful job creating it. I had to settle for a subset of his modifications to get it accepted, but it's still nice to have another choice. So, for now I'm using FLTK for any programs that require more extensive GUI functionality. I'm trying to resurrect and update legacy FLTK programs like APCStudio for audio editing and postoffice for email. FLTK already has some very helpful settings applications such as alsamixergui and flsynclient. Georg, creator of XFDOS and NanoLinux, took several FLTK programs and brought new life to them and even designed new ones to create a complete desktop. TinyCore Linux also uses FLTK for their desktop. Between these two sources and the apps that were listed at the FLTK site, one can piece together an entire desktop just of FLTK based programs. FLTK works on the major operating systems. However, if it's used with nano-x, it can be ported to Android, embedded systems and handheld devices. Later versions of FLTK have additions made to ease the creation of other backends without needing to rely on nano-x for portability. I've been working for a long time trying to get SDL to function as a viable backend.

However, I don't want to stop there. I've found several useful SDL applications including a SDL based PDF viewer, an ebook reader with text to speech capabilities using flite, a graphics viewer and a graphics slideshow program and font viewers. Another advantage of SDL is that it works on a wide range of systems from Linux and Windows to handheld devices and Android.

You can find a full range of applications for almost any need already written in curses. While it's fast and useful to run applications in console using options like BSDcurses, there is a port of pdcurses that works on top of SDL. So it can run anywhere that SDL does. While it looks like a text user interface instead of a GUI, using it with a SDL backend can make it function more like a standard GUI application. Most curses/ncurses based programs will work with pdcurses as well. I've been trying to update a nice curses based password manager that uses an earlier version of the keepass database format to work with a more up-to-date keepass format.

OpenGL is a great base for games and makes an interesting backend for developing a GUI. SDL and FLTK can integrate with OpenGL. SDL also uses OpenGL as a backend in some cases. Raylib is another very promising library that works on OpenGL. It was designed to make programming in C/C++ easy to learn. It can work with a GUI called RayGUI. Raylib and RayGUI are highly portable and work on a number of platforms. One other library I like that uses an OpenGL backend is otk. It's extremely lightweight (similar to single header projects). It has some very useful GUI controls and some useful example programs were created for it. OpenGL works on a number of platforms but what if you're on a platform where OpenGL drivers are not available? Mesa, the FOSS implementation of OpenGL, is another option. However, it can be a heavyweight library that's difficult if not impossible to build on many non-POSIX operating systems. There are several lighter implementations that tried to offer OpenGL 1.1 compatibility on handheld devices, older computer operating systems and devices that do not have OpenGL or OpenGLES drivers. One very well-known implementation is TinyGL. It provides a subset of OpenGL. It's been forked multiple times and many projects have added missing features. I've collected several patches and added even more missing features to one fork known as PicoGL. PicoGL has multiple backends including Nano-X, X11 and SDL. I've recently experimented with some success in trying to get otk to work with PicoGL and SDL as an alternative to OpenGL with X11 or Win32.

So while these various projects may all present different looks via their user interfaces and may even seem like random choices, I chose these options strategically with portability in mind. They can provide a coherent, unified porting strategy. OpenGL and/or SDL can be used as a base for many of these options providing portability to any of the operating systems that can support OpenGL or SDL. PicoGL can be used as a backend on systems where OpenGL is not an option. These three options run on multiple platforms. If X11, Wayland and Win32 aren't available on a system, they can work with nano-x or in framebuffer. If SDL works on a system, nano-x, pdcurses and PicoGL can work on that system since they all have SDL backends. I'm working on adding FLTK and otk to that list. If OpenGL is available on a system, SDL and Raylib work well with that. If nano-x works on a system such as FreeDOS or an embedded OS, FLTK and PicoGL can be ported using it. The goal is to make these components as portable as possible so they can be used on a wide variety of operating systems. They're also lightweight and fairly easy to build. They can run on more unusual operating systems and be more easily maintained. They may seem like a disparate group of libraries, but I think they could be pulled together and used to build on each other to improve portability and provide a way to run lightweight applications on a wide variety of platforms and operating systems.

I'm aware this type of project isn't going to be something of interest to the average user. It won't appeal to the person who prefers to use a package manager to install applications instantly or to the person who enjoys custom theming and making everything look coordinated on his or her system. I am primarily doing this for myself and will continue to work on these types of projects on my own. However, it would be fun to find others with similar interests to compare notes and possibly brainstorm, find new programs to port or share patches to bring new life to some older applications. Imagine running a set of lightweight applications on a very old laptop or computer or a handheld device. If it runs efficiently on older computers, it will run even faster on modern ones. It also gives one person the opportunity to know how to build and maintain the applications on his/her system. That person isn't stuck waiting for a patch from upstream or worrying about whether a favorite project will be abandoned. So, if anyone is interested in discussing a GUI landscape like this further, feel free to contact me on Mastodon (https://fosstodon.org/@lmemsm) or by email. Let's talk.

GTK2 fork

May. 7th, 2026 06:34 pm
I was very interested to hear about a GTK 2 fork. I have enough programs and libraries to build a portable desktop environment. However, I really miss SciTE and that requires GTK to build on most systems. I had considered trying to revive a GTK 1.2 build just to get a minimal version of SciTE working. Amigo Linux had an updated version of GTK 1.2. However, when I heard about the GTK 2 fork, I decided to give building it a try and see how portable it would be and if it would work on the systems I'd want to run it on.

I ran a quick test build on Debian and it worked well. Then, I spent several days trying to get this working with my legacy MinGW compiler. It works. I'm not thrilled with the Perl or Python requirements in the build systems for GTK and its dependencies. I'm also not thrilled about the hard-coded paths for finding assets and files. If I decide to go any further with it, I'd introduce my path library so locations aren't necessarily hard-coded. I'd also like to find a way to remove the Perl or Python dependencies from the build. I'm using configure and make, so I may not bother to create my own CDetect configure and GNU makefiles. If I was using later versions of the dependency libraries that required meson and Python, I'd consider it.

I already have applications that build using SDL, FLTK, pdcurses, otk and Raylib/RayGUI. That's enough GUI support to provide a comprehensive list of desktop applications. They're also easy portable and don't require a great deal of dependencies to build. So, I can build and maintain programs I run on my system from source code and patch them as needed. That is one of the major points Free Software, to give people the ability to build and modify the programs they use. I'm not sure whether I'll be adding GTK 2 to the list of GUI, TUI and graphics libraries I work with, but it's nice to know that it can be built from source and that it works. It's now an option if I need it.

If anyone is interested in the source code, the gtk2-ng project is here:
https://git.devuan.org/Daemonratte/gtk2-ng
I built it with glib 2.42.2, atk 2.14.0, pango 1.36.8, gdb-pixbuf 2.31.7 source code straight from the gnome.org site.

I'll be sharing some of my build scripts here:
https://git.devuan.org/lmemsm/bldgtk

Also saw mention of this project to run some of the programs that require GTK 3 with GTK 2:
https://github.com/stefan11111/gtk3-to-gtk2
It's getting harder and harder to find C/C++ programs. Many developers are working in other languages. Developers should have the choice to work in whatever language they want. However, it's dismaying to see the lack of C/C++ software currently available.

I recently tried to find FLOSS programs to set up a database structure and transfer tables from a working database to a new one. I'm trying to migrate the information from Microsoft SQL to PostgreSQL. While both systems have some great tools, I found it hard to locate easy to install, stable programs that could get the job done.

Microsoft SQL has sqlcmd and bcp. These programs can be used to query data from scripts or dump tables. PostgreSQL has psql and pg_dump. These have similar functions. While one should theoretically be able to use bcp to output a table and psql with the copy command to load a table, actually doing it successfully is another story. Any irregular data causes the transfer to fail. While these tools are really nice for batch scripting, they have limited use in some cases.

I saw recommendations for tools such as pgloader, ingestr, embulk and DBeaver to help me get the job done. It took forever to get pgloader to accept irregular passwords. I finally got a script that sort of worked. It moved 500 table structures over from Microsoft SQL to PostgreSQL. It started moving data and then it hung saying max connections reached. Changing its settings to try to make it use less connections did nothing. Plus, pgloader wiped out any tables and data I had already tried to move previously. Trying to install ingestr and embulk was a nightmare. Even with package manager tools like dnf, I was unable to get them fully installed and working properly. The tools are written in Python and Java. They require tons of support packages. The packages need to be installed using other methods than the local package manager such as by pip. I got absolutely nowhere with these solutions. I was told dbeaver could be used as a tool to copy schemas similar to pgloader. When I tried to get information on generating indexes in PostgreSQL that were equivalent to the ones in Microsoft SQL, I just kept getting errors. So, I found a lot of these heavyweight tools to be useless for my needs. They downloaded a lot of files that took up a great deal of disk space. It was hard to find and cleanly remove all the files they needed.

All I wanted was a simple C program that could do the data transfer and wouldn't need hundreds of files and packages installed. I knew a C program could do the job properly because I already had a transfer program that I'd written using C and ODBC that could copy tables. It was written to work with one row at a time which works great with smaller tables or individual inquiries but it wasn't designed for a large data warehouse with millions of rows per table. I spent a week rewriting my C table transfer program to work in batch mode. The new program is specifically designed to copy a Microsoft SQL table to an equivalent PostgreSQL table as quickly as possible. It does nothing more. It doesn't copy PostgreSQL to Microsoft SQL or handle deltas or translation of data. However, it just works and it works very quickly. It doesn't need a lot of space or memory. I wish there were more tools like these available. They're small, efficient and do one job well.

I now have a collection of ODBC based C tools that have been tested on a variety of systems from Windows to Linux to AIX. They do things such as run a query against a database, transfer rows from a table from one database to another, download rows to CSV or XML and more. For small tables, I can download each row to its own XML file. I can do that for multiple databases. I can then run directory/file a comparison tool to compare XML files and see if rows are different between two databases. It would be fun to share tools like these and eventually create enough lightweight tools that they could replace functionality of some of the more expensive commercial ETL or ELT solutions. Does anyone know of other lightweight FLOSS data transfer tools that do one job well? Do you have a good FLOSS ETL or ELT solution? Let me know over on Mastodon.
One thing I've wanted for a while now is a lightweight collection of desktop applications. Since my preference is for cross-platform software, it would be nice to work with applications that don't lock you into a particular system. So, you could use them with X or Wayland or nano-x or even in framebuffer mode. Operating systems like XFDOS showed you can put together a desktop collection that not only works on Linux or Windows but would even port to platforms like FreeDOS.

The average post on desktop software typically considers XFCE or LXQT lightweight and most people often prefer the larger GUIs such as Qt or GTK+. I'd like to see an alternative that uses more minimal GUIs. TinyCore Linux does a nice job of using FLTK programs. EDE (Equinox Desktop Environment) was an interesting concept but their separate theme library meant FLTK programs needed to be forked to support their themes. There are few enough FLTK programs out there, so wanting forks of them just made it harder to find programs for that desktop.

I've looked at various lightweight GUIs and graphics libraries and the best candidates in my opinion are FLTK, SDL and Raylib. nuklear seems like it would be a great option, but there aren't a lot of useful desktop style programs written for it. I also noticed some annoying screen effects on one of the platforms it supported when I was using the scroll bars. Fox Toolkit was popular at one point. However, the API wasn't stable and some programs were built for one version while others worked on a different one. That decreased the total number of programs that were usable. I feel FLTK is better supported and has a more stable API than Fox Toolkit. Some systems use older versions of GTK such as GTK 1.2 or GTK 2. Amigo Linux had a great collection of working GTK 1.2 applications. The main drawback to GTK 1.2 is lack of internationalization support. I'd be very curious to hear if other projects are still trying to keep these options alive and if so, what applications are working with these GUI toolkits.

FLTK is already a cross-platform library. With the nano-x backend, it can work on any platform nano-x can support. With the update to version 1.4, FLTK made it easier to work on backend support. I've been attempting to get a SDL2 backend working with FLTK. That would allow it to work anywhere SDL2 can including in framebuffer mode.

SDL is highly portable. Unfortunately, applications for it might target 1.2.x or 2 or now even 3. I'm trying to update applications so they'll work on later versions of SDL without losing the flexibility of working on older ones as well. SDL is a graphics library. It's hard to find good support for GUI applications using it. I've tried several GUI libraries built on SDL. None of them are exactly what I'm looking for. Plus, very few have any desktop style applications built with them. PDCurses has a SDL2 backend. It had a SDL backend and I worked on adding SDL2 and SDL_ttf support. So, if you don't mind the look of text user interface style programs, you can run ncurses/PDCurses compatible applications using SDL and PDCurses.

Raylib with RayGUI is a newer alternative than the others. It's used more for games than desktop applications. However, it has a lot of potential.

With portability goals and minimal GUI libraries in mind, let's talk about what types of applications you can find that would work on a system like this. First, there are enough command line applications using ncurses that you could probably do most things you want to do on a desktop. However, it would be nice to have more options than just the ones you could also currently run in console mode.

With SDL, there's support for reader software like sdlbook and bard. The sdlbook program uses the mupdf library and djvulibre as backends and can support any format those libraries do. The bard program is a minimal ebook reader with text-to-speech support using flite. I have been experimenting with a fork of the last GPL'd version of mupdf. While it does not offer ebook or HTML support, it does offer a stable API. I've added cbr support and modified cbz support using SumatraPDF's LGL'd unarr library. I added SVG support with nanosvg. I'm working on adding support for other graphics such as GIF using stb. So with these programs, there's good coverage for reader applications.

While mupdf can be used to view graphics, I also like picaxo which can support any image format that SDL_image can handle including SVG. Another lightweight viewer is Perigee slideshow which can let you see several graphics in a sequence using slideshow transitions. While it already has a Win32 front end, I created a cross-platform GUI front end for it using FLTK. It's nice to be able to do more than view graphics in a desktop environment. The grafx2 and lodepaint programs seem like great options for editing graphics. Tuxpaint could be another alternative. Personally, I really like I.mage. While there was some work done to add SDL support to the GUI library I.mage uses, it was never completed. I don't think SDL alone is enough to replace the Win32 or GTK backends but FLTK might be able to do the job. I'd love to see some interest in trying to get I.mage working with FLTK. While there are other graphics editors out there that work in lightweight environments, those are the ones I found most promising.

Audio is harder to find support for. The flsox program is a cute, lightweight, FLTK based application. It can play and record audio, but it would be nice to have a decent audio editor. I have several command line wave utilities I've been experimenting with. One used conio to draw the waveform. I added support to use SDL in place of conio on systems where conio wasn't readily available. Fox Toolkit had a nice audio editor called Rezound, but that would require using yet another GUI library. So, the best option I've been able to find to date is apcstudio. It uses FLTK. I found the original source code rather unstable on many platforms but I switched around some of the C++ types to ones that were more readily available cross-platform and it seems more stable now. The one drawback I noticed is that it only displays one waveform which works fine for mono formats but not for waveforms with right and left channels. I was wondering if a command line tool could be used to split the waveform into right and left channel waveforms and then each could be edited separately. Then, a command line tool could reintegrate them again afterwards. It would be nice to try to get apcstudio debugged and see if people think there are any features missing that might be easy to add. It's easier to find audio playback software than audio editing software. Programs like Timidity++ and Milkytracker are nice options to have. Multimedia players are also easy to find for lightweight desktops. Some have versions that run in framebuffer. I happen to really like the flvlc and flxine front ends to popular multimedia libraries.

Other useful desktop applications usually include a calculator like flcalc and a calendar or pim like fltdj. xdiskusage is a nice FLTK based GUI front end for du. diffh gives a graphical view of diff that's viewable in many browsers. I typically don't use file managers but I prefer the two pane variety if I do use one. The SDL based fm program offers a nice, cross-platform portable file manager.

The biggest gap is office suite style software such as a word processor and spreadsheet. While there are some ncurses based spreadsheets, the FLTK based sprsht program makes a nice alternative to console applications. There are some FLTK based editors and even a few SDL ones. I personally prefer using a programming editor over a word processor. Many programming editors support custom extensions. I use SciTE with lua scripting and its ability to execute external applications. I've been able to incorporate hunspell for spell checking into customizable programming editors such as SciTE. Unfortunately, SciTE requires a heavyweight GUI. It could be built with an older version of GTK but that would require adding another GUI to my list of desktop GUI libraries to support. I've looked for options that also use the scintilla editing widget. The best alternative I could find was Fxite (which would require Fox Toolkit) or textadept which can be built with pdcurses. The fldev program is a lightweight FLTK based programming editor. It's no replacement for SciTE but it was able to work as a GUI front end to gdb at one point. It would be nice to restore that functionality in a cross-platform compatible way. The wordgrinder program is console based but seems to be the most word processor like of various text user interface options. If one wanted to incorporate the TV libraries, there are even more console based text editor applications that could be potential options. I still haven't come up with a clear solution. Would be interested to hear what others would think could make a suitable lightweight GUI editor/word processor.

Communications programs are another key area. There is also a huge gap for lightweight GUI alternatives in this space. There are mail clients like FLTK based FlMail and hermail. I happen to be a big fan of Sylpheed. To get it working in a more lightweight environment would involve using an older version of GTK. An option that has a lot of potential is to get the FLTK based Postoffice program working again. Maybe a command line or library based (possibly curl) implementation of SMTP and POP3 could be added to the Postoffice program. I have been able to get it to build on later versions of FLTK and worked on trying to make the interface more stable. The main thing missing at this point is to make the mail protocols more up-to-date and cross-platform portable. There are several very popular ncurses based email clients as well. Browser options include Netrider, Fifth, D+ and Dillo. While none of these is a perfect solution, they do give some minimal browsing support. A SDL based Gemini browser could also make a useful option. There is a very nice FLTK based RSS reader. However, it's just a reader and requires another program like curl to download the RSS feeds and make them available. Putty has command line options for ssh and sftp.

Have I forgotten anything? What else would a good lightweight desktop require? Is anyone besides me interested in a lightweight desktop like this? Feel free to continue this discussion on Mastodon: https://fosstodon.org/@lmemsm I'd love to get a project going to provide an ultra lightweight, highly portable desktop alternative that's not tied down to any particular display server, windowing systems or operating system. If anyone wants to test out some of these applications or brainstorm how to improve them, please let me know.
I wanted to do something FLOSS related to brighten up people's holidays this year. My initial idea was a countdown to the holidays highlighting different Free, Libre and Open Source software each night. While I may still do that on my Mastodon feed, my initial plans were derailed. I'm in the middle of updating my build scripts and rebuilding some of the FLOSS programs I use from source code with the latest versions of libraries. I thought about sharing build scripts and doing some kind of build from source group meetings but I haven't been able to connect with other source code enthusiasts who enjoy building their software from scratch. I also have not figured out an effective method of sharing build scripts or executables. Feel free to contact me on Mastodon if you have any suggestions related to these ideas: https://fosstodon.org/@lmemsm

One thing I can do for the holiday season is put together a list of astronomy related FLOSS programs. I've built several from source over the years and have particularly been on the lookout for lightweight, low dependency astronomy programs that work well on lower resource and older computers. I'll go through my notes and build scripts and try to post some of them here. I will be adding to this page as I find programs. Also, feel free to contact me and suggest your favorites.

Let's start off with the Astronomy Picture of the Day from NASA. You can also find feeds with these pictures on several social media networks and programs that download and display these pictures. NASA's pictures are in the public domain but some of the APOD pictures are from outside contributors and may have be copyrighted.
https://apod.nasa.gov/apod/

Here are some of the more well-known FLOSS astronomy software. Two of the most well known are stellarium and celestia. They run on a wide variety of platforms and I believe there was even an Android port.
Here are links to the Windows portable apps versions. You can find a link to the original web sites from there:
https://portableapps.com/apps/education/celestia_portable
https://portableapps.com/apps/education/stellarium_portable

There are also addons for celestia but the licenses may vary:
http://www.celestiamotherlode.net/

Other FLOSS astronomy programs I often see mentioned include:
https://kstars.kde.org/
https://www.ap-i.net/skychart/en/start
https://sourceforge.net/projects/openuniverse/
http://www.moshier.net/ssystem.html

Next we have astronomy software for Android. Google's Sky Map program is Open Source. You can find a copy of it and other interesting astronomy programs at F-Droid. There has been a lot of discussion over whether F-Droid will be able to continue its mission with the changes to Google policies for software installation. That's a topic for another post. In the meantime, download these while you can. It wouldn't hurt to have the APKs stored someplace and to look into installing adb (Android Debug Bridge) on your computer for future use just in case.
https://f-droid.org/en/packages/com.google.android.stardroid/
https://f-droid.org/en/packages/org.tengel.planisphere/
https://f-droid.org/en/packages/space.celestia.mobilecelestia/
https://f-droid.org/en/packages/com.forrestguice.suntimeswidget/

Finally, here's my favorite category, lightweight cross-platform portable astronomy software. One program I really like is nightsky. It works anywhere the SDL library does. It's been ported to a wide range of platforms including handheld devices. It's lightweight but it's not limited to the command line. It was written for SDL 1.2.x but I do have a patched version that works with SDL 2.x. Haven't had time to look into updating it for the latest version of SDL yet. The lunar calendar program, lcal, is another lightweight option. It is a command line program and generates a postscript lunar phase calendar.
https://nightsky.sourceforge.net/
https://pcal.sourceforge.net/

Command line program and library to show sunrise and sunset.
https://github.com/troglobit/sun

Some lightweight X windows programs with an astronomy theme include:
https://github.com/memarc/sunclock
https://hewgill.com/xearth/original/
https://sourceforge.net/projects/xplanet/

The starplot 0.95.3 program is an older program that requires GTK+ 2 to build.
https://packages.debian.org/bookworm/starplot
https://www.freshports.org/astro/starplot/

The gstar program is a GTK 1.2 front end for the starchart programs which is also included. The starchart program is a command line program that creates star charts in postscript format.
https://users.wfu.edu/cottrell/gstar/

The hebcal program is a command line calendar program that also gives the time of sunset:
https://sourceforge.net/projects/hebcal/

The astrolog program is a command line astrology program but the code has some useful astronomy calculations. It used to be freeware but is now available as Free Software.
https://www.astrolog.org/astrolog/astfile.htm

The aa program is an astronomical almanac which calculates orbits of planetary bodies and reduces the coordinates of planets or stars to geocentric and topocentric positions. It was recommended by Neville Jackson on the It's Foss Community Discussion board.
https://github.com/pmontrasio/astronomical-almanac-js/blob/master/aa.c

Some other programs I haven't personally tried but look worth checking into are:
https://github.com/dcf21/star-charter
https://github.com/da-luce/astroterm
https://github.com/XEphem/XEphem
https://github.com/nasa-lambda/skyviewer
https://github.com/astromatic
https://siril.org/
https://github.com/OpenSpace
https://github.com/csete/gpredict
https://sourceforge.net/projects/previsat/
https://github.com/pchev/virtualmoon
https://sourceforge.net/projects/virtualplanet/
https://github.com/artyom-beilis/skyhopper
https://github.com/cosmonium/cosmonium
https://github.com/pmontrasio/astronomical-almanac-js
https://sourceforge.net/projects/hnsky/
https://github.com/AndrewBuck/orsa
https://github.com/cosinekitty/astronomy
I've been looking at different diff tools trying to figure out how I would design my own cross-platform portable diff program with the features I use most. The most interesting thing I found out was how different the various outputs of the diff programs all are. There's also no one algorithm that creates the most intuitive output for a human to read. A certain algorithm may be better for one case but not for another. I'll share a summary of what I've researched about diff utilities so far.

The two main diff programs I think about when I consider diff programs are the diff from GNU diffutils and the BSD diff program that's available with many BSD operating systems. The BSD diff program traditionally uses a variant of the Longest Common Subsequence and attributes the algorithm they use to Harold Stone. The latest GNU diff program uses Myers' algorithm. Myers' algorithm was a breakthrough because it managed to solve the problem in O(ND) time, something that was once thought to be impossible. The original GNU diff program predated Myers' algorithm so much older versions used a different solution. I've seen some posts at the BSD site that one of their goals was to add a Myers' implementation to their diff program to improve speed. I haven't seen anyone complete that project to date. The improvement in speed of the Myers' algorithm does come at a cost of requiring more memory. Useful diff algorithms need to keep the trade off of space versus time in mind and not come up with solutions that fail if the files being compared are arbitrarily large.

Most systems use either the GNU diff or the BSD diff or are based on them. Busybox is based on the BSD diff. I did search for other implementations that might be useful for people using an alternative to the standard GNU coreutils and diffutils. I was only able to find a few. It seems diff algorithms are more easily found in version control tools such as git. Toybox has an original implementation of diff. It's in the toys pending directory so I assume it's not part of most standard Toybox installations. I did some experimenting with it to see if I could use it as a stand-alone program. I got as far as finding some bugs in the implementation of displaying diffs in Unidiff format with a specified number of context lines. The sbase project also has an implementation of diff. It's written to optimize for speed. It can use different algorithms depending on the situation. However, in using it, I found cases where it was incorrectly marking lines as different when they were the same line. I originally assumed both projects used Myers' algorithm, but on closer examination, they probably don't. I found another C based implementation of the diff algorithm in GOT (Game of Trees version control system) which does use Myers' algorithm. Was able to get it to compile and compare two files using it. Interestingly, the output from it did not match with the output from GNU diff.

The projects have a wide range of licenses from GPL to BSD 0 clause. Busybox is licensed using GPLv2.
I am not at all sure how they legally use the diff code based on BSD systems which is licensed with a Caldera 4 clause license that is incompatible with GPL licenses. Possibly the Busybox developers wrote an exception for the Busybox license so they could incorporate that code. sbase uses an MIT license. The BSD based diff is mainly using a BSD 3 clause license (or 4 clause in older versions) but includes the Caldera license in the diffreg.c file. I've searched for other versions of the BSD diff tool that use other licenses. While the licenses vary, most copies of the diffreg.c file include the Caldera license. I did run across a few BSD variants that were licensed with BSD 3 clause licenses and didn't mention the Caldera license in diffreg.c but I think this was an omission and don't think their versions of diffreg.c were actually licensed as BSD 3 clause. Finding a decent version of the diff algorithm that can be used in a library and can link with code using GNU GPL licenses or proprietary licenses is no easy task.

I still find it surprising that the various diff implementations all come up with different output and not even different versions of the GNU diff utility will necessarily have the same results. It makes it harder to verify if a diff program's output is valid or not.

I'd be very interested to hear what others think are necessary features in a diff program. Does an alternative to GNU diff work well enough for your situation? Are there features from one diff program you wish were part of another? I'd like to take the best from some of the various diff programs out there like sbase and toybox and combine them to make a diff that has all the functionality I use most. I'd need a tool that I could use in conjunction with programs such as diffh which can display differences in files side by side in HTML format. It would be nice to discuss this further with others looking for lightweight, efficient or cross-platform tool implementations for their systems. How would you design a diff program?
I've been collecting some FLOSS links to programs that might be of interest to science fiction enthusiasts for a while now. Thought I'd document them in one place.

Here are some FLOSS useful projects for anyone interested in astronomy:
https://nightsky.sourceforge.net/
https://portableapps.com/de/apps/education/stellarium_portable
https://portableapps.com/apps/education/celestia_portable
https://f-droid.org/en/packages/org.tengel.planisphere/
https://f-droid.org/en/packages/com.google.android.stardroid/
https://www.openspaceproject.com/

Here are some science fiction related games:
https://github.com/IceCreamYou/Daleks--JS-web-version-
https://gitlab.com/esr/super-star-trek
https://github.com/jj1bdx/bsdtrek
http://starvoyager.bluesky.me.uk/
https://www.netrek.org/
https://identicalsoftware.com/games/smalltrek
https://scp.indiegames.us/
https://web.archive.org/web/20200129140943/http://www.barnsdle.demon.co.uk/game/starlanes.html

Here are some science fiction related apps:
https://f-droid.org/en/packages/com.example.android.maxpapers/
https://f-droid.org/en/packages/net.ddns.mlsoftlaberge.trycorder/
https://f-droid.org/en/packages/org.tlhInganHol.android.klingonassistant/

There are several projects related to LCARS ( Library Computer Access and Retrieval System ) used by the UFP. Here are some of them:
https://github.com/louh/lcars
https://sourceforge.net/projects/lcars24/
https://sourceforge.net/projects/lcars/
https://sourceforge.net/projects/lcars-system-3/
https://sourceforge.net/projects/lcars-win/
https://sourceforge.net/projects/gtklcars/

Have I missed any of your favorite science fiction themed Free, Libre and Open Source Software? Feel free to recommend some new links: https://fosstodon.org/@lmemsm
I've looked at several lightweight Linux distributions and tried alternative FLOSS operating systems. I keep looking for a distribution with similar goals. I have a lot of experience porting programs to alternative operating systems or compilers. It would be nice to use those skills to build programs and libraries for a lightweight distribution. Unfortunately, I've been having a hard time finding a project to work with. I've created my own build system/lightweight package manager over the years. It makes it extremely quick for me to put together a package for a library or program. However, it makes it very difficult to work with other projects that have their own styles of building projects and their own tools for doing so.

If there is an operating system project out there that could use help, I would love to hear about it. Please let me know. I always hear stories of projects needing help. However, I rarely have any luck getting involved with them when I offer my assistance. Since I've been unable to find a compatible project to date, I've thought seriously about creating my own. The main issue I see is that it's unlikely to be used by anyone but me. That means there's no good way to share work with others. One goal that I'd want in a project of this nature is to offer some form of community. Communities can offer a place to share ideas of which programs are useful. They share tips and tricks about how they use FLOSS in their daily life. So, how do you find a compatible community when you know you're working on a personal project?

Here's my latest idea. What if there was a group that got together to discuss building a lightweight Linux distribution completely from source? There are projects like LFS/BLFS that offer a good starting point. It's also nice to have the opportunity to go off script and use choices that may not be part of LFS or other projects. Having a group would allow for discussion of pros and cons of various libraries and programs. One would also have the power of the group when attempting to debug issues with builds. It would offer an opportunity to share favorite programs and customized patches with each other.

So, if you've been wanting to build your own customized version of Linux specifically for yourself but were uncomfortable doing it with out some sort of support system, how about joining in? You can reach me here, if you'd like to discuss some of these ideas further: https://fosstodon.org/@lmemsm
Let's talk console based software and FOSS operating systems. First, some console based software resources I've liked over the years include:
https://inconsolation.wordpress.com/
https://termux.dev/en/
https://archiveos.org/rogue/
http://inx.maincontent.net/

I have some other resources and console program recommendations in other articles I've written here.

I've seen a lot of FLOSS projects try to convert Windows users to Free Software by sharing GUI based Free operating systems that look a lot like Windows. I really don't know if this is the best strategy to convert people to using something else. Wouldn't it be nice to offer something better and more intuitive rather than just copy what another system can do? I certainly do not think this a good strategy for getting die-hard Windows command line users to switch to FLOSS operating system alternatives. Users that started on DOS and graduated to Windows should be a great market to tap into. Many Unix and Linux systems emphasize console based interactions. However, when Free Software advocates try to reach Windows users and get them to switch, they often end up showing off Windows-like GUIs. They leave out a portion of the market. They leave out the Windows users who don't use Windows because of its GUI design.

What about those of us who still prefer a good old-fashioned command line and want to use console or terminal sessions to get the majority of work done? What kind of conversion path to a Free OS is there for us?

FreeDOS is a wonderful option if you just want DOS. Unfortunately, a lot of current hardware support and drivers are lacking. For years, I've had trouble switching to Linux due to hardware incompatibilities and driver issues. Of all the FOSS operating systems I've tried (BSD, FreeDOS, Minix, etc.), Linux has the best driver support. So, if Linux can't support someone's hardware, it's very likely other options like FreeDOS can't either. FreeDOS does do a very decent job of supporting legacy software and hardware though.

ReactOS is a great path for people who want to use a Free Operating system but want the familiarity of Windows. It runs many Windows programs natively. You can continue to write programs using a Win32 API and have them work on the system. Like FreeDOS, it also doesn't have the drivers and hardware support a commercial system does. Theoretically, when they have something fully compatible with Windows, Windows drivers should just work. It's not at that point of development yet. The biggest drawback I had when trying to use ReactOS was stability. Some Windows programs worked perfectly out-of-the-box. Some crash. I would have liked to get more involved with the project and possibly debug some of my issues. I didn't find it an easy project to join in on if you wanted to help with development.

Using Linux with Wine is another option for people who want to keep using their Windows programs on a Free operating system. I even read about a ReactOS side project where someone used Linux and Wine as a starting point for a ReactOS like system. I love the idea of being able to compile Win32 programs on Linux natively with winelib and have them work on Linux. However, the usual usage is to run Windows programs (closed source) with Wine which emulates a Windows system. They don't even encourage building programs from source with winelib. Personally, I've always found winelib hard to build from source and Wine hard to install on my systems. Some Linux distributions support working with it better than others and some Linux distributions come with Wine already installed.

The X Windows alternative nano-x also offers some Win32 support so you can compile some Windows programs and use them on a system with nano-x libraries. You can build nano-x like an X Windows alternative with client/server support. Projects like NanoLinux and XFDos have created desktop environments using it. You can also build everything into one application (the client and server support) and run applications without a separate nano-x based desktop environment. Most projects have used nano-x to build X11 applications without requiring X11 libraries. However, the potential to port some Win32 applications using the micro-windows part of nano-x is there. Also, nano-x works with a wide variety of operating systems and on a wide variety of hardware.

There are several options for Linux distributions that try to attract Windows users either with Windows look-alike GUIs or with WINE offering the ability to continue to run real Windows programs. However, what is there that's been designed to appeal to those of us who are command line users and want to make a switch? Other than distributions used for restoration or rescue systems like grml and distributions that target minimal systems such as Linux distributions you can run from a floppy or CD, there really aren't many distributions that emphasize a command line interface. There are even less if you're looking for active distributions. Termux is an exception and it targets Android users.

Shells like bash or ash may offer more functionality than batch files, but what competes with Powershell on Linux? At least Mono offers an alternative to .NET. Also, someone who works with a lot of batch files may not find the switch from batch to a shell script all that easy. Backslashes are replaced by forward slashes. Commands like cp and mv are similar to copy and move but don't quite work the same way. Type copy filename in a command line on Windows or DOS and it copies the file to the current directory. Try that in a bash shell with cp and no target file name and you could end up with a mess. Similar syntax that works on Windows may end up corrupting files on Linux/BSD/Unix. If a user isn't already familiar with bash, ash or some of the other shells used on Linux, it's not an easy switch. Just switching between a csh and bash can be a real nuisance to Linux users. Imagine switching from batch to bash.

FreeDOS used to be able to run embedded with Linux systems much the way Windows used to allow users to switch between Windows and DOS. I don't know if that's still an option with Linux distributions and FreeDOS, but DOSBox can make a useful alternative if you want to run Linux and some form of DOS together. Using FreeDOS or DOSBox with Linux allows people to keep working with batch and already created batch scripts. The one drawback with DOSBox is that it doesn't allow for long filenames (beyond the 8.3 convention). There may be some patches to DOSBox that fix this. If so, I would love to find them.

I like the idea of using JavaScript at a command line. It makes an interesting alternative to a shell script. Windows offers this option as part of its wsh system. However, the JavaScript used by Windows is non-standard. It has several extensions not used by other JavaScript implementations such as commands to work with the file system. I looked into projects like TeaJS that work on both Windows and Linux systems as a scripting option. NodeJS seems to have become the de facto standard for command line JavaScript. Plus, it's a cross-platform solution. The main drawback I've heard regarding NodeJS is that the API changes rapidly. So, it's not a very stable system to create command line scripts that you want to be using for years to come.

What are some FOSS operating system options that might appeal to command line users? One could start with a minimal system like Debian netinst or AntiX or TinyCore Linux or possibly some of the musl based distributions. Distributions with large software repositories may have some useful command line applications. Inconsolation showcases many console based apps available from repositories. However, some applications may be dated, not actively supported or have such limited usage that they aren't easily found in a repository. In those cases, it may require building them from source if someone wants to work with them. So, no particular Linux distribution really stands out to me as the best migration path for console users who want to switch to a FOSS system.

For me, the easiest migration path is to have FLOSS programs that work on multiple operating systems. I can use them on a FLOSS operating system, but I can also use them at work where we are required to use closed and proprietary operating systems. If a cross-platform FLOSS program saves data in a particular format, it's likely to use the same format across multiple operating systems. It makes it easier to work with and transfer data. It also helps when the commands you learn, function the same in multiple environments.

Here are some command line tools I use on multiple platforms. I do a lot of my music creation using abc2midi and abcm2ps. I use TiMidity++ in console mode or via command line to convert midi files to wave files. I use diffh and a web browser to view file differences. lxsplit is nice for splitting and joining large files. I use lynx to check if a web page is browser-friendly and accessible. I use a lot of archive tools, communications tools such as curl and putty's plink and psftp, database connection tools, etc. from the command line. There are calendar programs like lcal, dictionary and grammar programs such as sdcv and diction, timer programs and more. There are even programs to draw or edit graphics such as gle, netpbm, imagemagick and graphicsmagick and programs to create DVDs such as dvdauthor.

There is a pattern I've seen with Linux for a long time now. There are great FLOSS program options that appeal to many types of users including those who prefer the command line. With software, having lots of choices can be a positive. However, with operating systems, choice isn't always so positive. There are so many Linux distributions and FOSS operating system options, it's difficult to find one that's user friendly and a good fit. With Windows, there's just one source for it and programs that work on one Windows system work on another Windows system. With Linux, it's not one size fits all. There are so many alternatives and often, none seem to be just right. It's hard to use software from one Linux distribution in another, let alone try to get your Windows executables to run properly. Maybe if more of the Linux community adopted the Linux from Scratch motto of your operating system, your way, it would be easier to switch. However, with lots of Linux operating systems, each with their own niche and their own emphasis on certain features and distinct avoidance of other features, it makes it hard for a user that doesn't fit a specific demographic to use a particular distribution. It's even harder for someone who wants to volunteer efforts to help out a distribution to find the right distribution that would accept the type of help he or she would like to offer.

FOSS is supposed to give users a way to get off the merry-go-round of continually needing to pay to upgrade hardware and software. However, it's not always easy to make that switch. Just offering an operating system that outwardly looks similar to a Windows solution so it will seem familiar isn't always desirable. It can be harder for users when software seems almost alike but certain parts don't work the same way or may potentially have devastating results. The cp command overwriting files that copy wouldn't is a good example. Offering GUI solutions to attract Windows users who primarily use the command line is just not an effective strategy.

What techniques or features would make the switch from another operating system easier for you? If you're like me and prefer working in a console based environment, what would your ideal operating system look like? Have you found a FLOSS distribution or FLOSS tools that fit well for you? Please feel free to share some of your more useful FLOSS finds with me on Mastodon.
I recently had an issue doing an upgrade of AIX Toolbox on an AIX machine and it caused the sudo program to fail because it couldn't find dependencies it needed to execute successfully. I started searching to see if there were simpler alternatives that could do a job similar to sudo and would not have so many dependencies. Of the various options out there, I found three that were interesting.

Doas was created for OpenBSD. There are different versions of the program, including a portable fork called OpenDoas. I tried this version, so I can't say much about the others at this point:
https://github.com/slicer69/doas
The program does build on Linux as well as on the BSD systems. It can use BSD functions on BSD systems for authentication but uses PAM on Linux and other systems. The pam_start function needs struct pam_conv to initialize and part of pam_conv points to a function that handles input. Linux, Solaris and some systems provide functions as part of their PAM library. However, not all systems have a library function to pass to pam_start. I wasn't able to find a supplied function on AIX. OpenDoas appears to have a function as part of the OpenDoas program itself. There are also some simple examples of a function that can be used with PAM available online if you're on an operating system that doesn't have one readily available.

I recently found out there's a fork of doas that does not require pam:
https://github.com/Duncaen/OpenDoas

Another option I came across was called please. It only offers the option of PAM authentication. It has the same issues for portability with regards to the function needed by pam_conv. You can find the source code for please here:
https://github.com/gblach/please

The last alternative I experimented with is sup. It's on the recommendations page at suckless.org. The interesting thing about this program is that it doesn't require PAM to work on various systems. That's a nice feature if you're building a minimal operating system and don't have the PAM library built and installed. It has an option to use a hash function to make sure that the user is running the program they're supposed to and not a program with the same name that has been substituted for it. The hash function has a less lenient license than the program on its own. I was thinking it would be nice to use a system library with a hash function instead of needing to use the one provided by the program. However, that would increase the number of dependencies the program requires. The sup program also has a feature to run a program with a fork. As I'm not a fan of the fork function and how many resources it uses and its lack of portability, I avoid that option at all costs. I remember the topic of fork coming up on the musl mailing list. The spawn function was mentioned as a more efficient alternative. Another difference between this program and the other two is that it uses hard-coded settings rather than needing external settings files. This requires recompiling to change options, but it makes it harder for someone else to modify the settings from a security standpoint. Source code for sup is available at:
https://github.com/dyne/sup

Upon further investigation, the sup that the suckless.org site recommends is the earlier version found here:
https://oldgit.suckless.org/sup/files.html
It does not include the hash and fork options and offers a more minimal implementation with straight-forward code.

I've seen some complaints that using sudo or operating/logging in as root can be more insecure. Alternatives may be more secure when they have less code and are easier to maintain and debug. That's one reason they may be attractive. However, the alternatives need to be well written or well tested and debugged or they can be more insecure than the standards. There's also the advantage of security through obscurity. If exploits use sudo, they may not be expecting or looking for an alternative like doas on a system. Many people prefer using whatever's standard assuming that it's secure enough or so many other people wouldn't be using it too. Just as having less code can be more secure, requiring less dependencies can also have security advantages. It's another way to limit the amount of code in a program. Using a shared library can also create security issues for a program that may need to be addressed.

As a cross-platform programmer, I always look for programs that will work on a variety of operating systems. The sudo alternatives port to many systems but many of their concepts won't transfer well to Windows or DOS operating systems. While you can have multiple users on some DOS variants, it's more of a single user operating system and restricting who can run things is not typically an issue. On Windows, this can be important. However, Windows has a completely different way of handling permissions and rights from Unix and Linux systems. I did run across some samples of sudo-like alternatives designed for Windows. However, they work very differently.

It was interesting to find out how programs like sudo or the alternatives I've mentioned function. A sudo-like program is owned by root and has a special permission set on the program file. By setting the suid bit on the file permission of the program, a non-root user can run the program as if they are the root user. A technique like this would not work natively on Windows. One can elevate permissions in Windows using the Windows API. However, it doesn't work in all cases. There's a way to use SeDebugPrivilege to elevate permissions in a program but some organizations turn that privilege off for their users.

Basically any of these types of sudo like programs uses a function such as execute or spawn or CreateProcess to run other programs. They allow a user who typically doesn't have permission on a particular operating system to have that permission by starting another program or process through that program. In some form or other, that program needs to have special rights to run other programs whether the user has the rights to or not.

I find it interesting that root automatically has permissions to copy, move or remove files, no matter what directory. On POSIX systems, running as root really solves a lot of permission issues especially when building and trying to install programs. While Puppy Linux embraces the idea of running as root and some small, single user systems work fine this way, many Unix and Linux systems highly discourage running as root. While it's nice to be able to easily install a program you built, it's not helpful if you accidentally install something over another library or program and cause your system to fail in the process. It's also easier to accidentally remove needed files in a critical directory when you have the permissions to remove anything. For instance, a misbehaving install script could easily wipe out files needed for the system to operate properly. I do feel that critical programs with dependencies, if built statically, have several advantages to programs using shared libraries. They won't fail if there are issues with finding or loading a shared library on the system. Also, someone can't hack the system by having that program load the wrong library with a function that doesn't do what's intended. At this time, static building isn't widely embraced on Linux systems and the GNU glibc library cannot be used to build static programs. One would need to use a C library such as musl if static builds are desired. I personally happen to think there are many advantages to using musl over glibc. However, at this point most Linux operating systems still use glibc. Both using alternatives to glibc and running as root are not mainstream practices and both can be controversial in many sectors. There are pros and cons to running as root versus running as another user. That's what makes programs like sudo and similar alternatives so useful. They give the power of root but can limit what you can do with it to make sure you don't accidentally run commands that could disrupt or cripple the operating system.

Personally, I'd like to see a cross-platform sudo alternative that would work with Windows as well as Unix (including AIX) and Linux operating systems. It would be nice to have a small, simple program that would work for most multi-user operating systems available. I prefer the idea of a more compact program with very limited dependencies. A static build or no extra libraries would have avoided my shared library issue on AIX which caused sudo to fail.

I'd be very intrigued to hear about other sudo alternatives that are available. I'd also be interested in hearing about the pros and cons of security with regards to use of some of these programs. What do you regularly use on your system? What alternatives to root or sudo have you found? What works well on multi-user operating systems beyond Linux and Unix? What are your security concerns using sudo or some of these alternatives and how do you work around them? Feel free to share some of your comments on the topic on Mastodon. I'll be updating this article with more information if I find other lightweight, low dependency sudo alternatives that I like.
I've been interested in web browser development for a while now. Trying to find a lightweight web browser than can be built independently from source and still supports the ability to view the average modern web page is extremely difficult. I feel like the main browser developers now have so much of a monopoly over web development that they managed to become the web standards committee, taking this job away from the W3C which originally maintained web standards. They control what standards become part of the web and even eliminate the need for certain products. Products like Flash and Silverlight became practically obsolete with the advent of HTML 5. While Flash and Silverlight weren't exactly a boon for Free and Open development, the current web standards are so difficult to develop for that independent commercial and Free/Open development alike are both at a loss to keep up.

Some of the browsers I was able to build myself included Netrider, D+ and lynx. Netrider ( https://sourceforge.net/projects/netrider/ ) is based on an older version of webkit. It has a FLTK front end, but was designed to easily allow for other front end development using other GUI libraries. I've used it with SDL and other options. I also ported it to work on Windows so it provided a cross-platform solution. D+ is an older fork of Dillo. Unlike Dillo it works on a variety of operating systems including FreeDOS. Lynx is a text based browser.

There were several text browsers at one point but now development seems to have stopped. Originally one could surf the web using just a text based browser but trying to do so now, is extremely difficult. Many web pages just don't render well in text alone. This is doubly troubling because it's removed the ability for many to use text based browsers and it's made it more difficult for those who are visually impaired to surf the web. I often used text browsers to make sure that the web pages I created rendered well and were easy to navigate. This was one test I used to ensure the pages were user friendly for the visually impaired and the browsers they often use. Some other older text browser projects include links, links2, elinks, w3m. Links was an interesting project as far as text browsers go because it allowed some viewing of graphics using the Linux framebuffer or SDL.

Fifth ( https://github.com/clbr/fifth ) is also an interesting web browser alternative. It's available as a package for TinyCore Linux. Like Netrider, it's based on an older version of webkit and provides an FLTK front end. Unlike Netrider, it's not as portable to other platforms such as Windows.

I looked at netsurf at one point because it's one of the few active independent web browser projects out there. I was unable to build it myself from scratch. It had several libraries, little documentation on building and I had difficulties finding out which version of which library worked with the others. So, I had no luck getting it to build independently as a cohesive project.

Some suckless.org developers solved the issue of getting a modern day web browser to build from source by adopting surf. Surf uses webkit and a GTK GUI front end. The Linux from Scratch project currently includes lynx, links and these browsers in their documentation: https://www.linuxfromscratch.org/blfs/view/svn/xsoft/graphweb.html

There are several interesting independent browser development projects but like surf, they typically use libraries such as webkit or gecko from a larger web development project.

Some independent operating systems are trying to find a way around the browser issue by developing their own. Ladybird from SerenityOS is an example of this: https://ladybird.org/

Some developers are trying to simplify browser development by creating an alternative to the HMTL 5 standard. This is where Gemini comes in. Unfortunately, Google has renamed their AI to Gemini as well which makes it difficult to search for information on the Gemini protocol. One can read more about Geminispace here: https://geminiprotocol.net/ There was an interesting critique of the Gemini protocol from the developer of curl: https://daniel.haxx.se/blog/2023/05/28/the-gemini-protocol-seen-by-this-http-client-person/ I'm not sure if any of his issues have been addressed but so far, Gemini hasn't hit the mainstream for replacing the World Wide Web and HTML 5. I have to say, I do like the looks of the Gemini based web sites. However, not all Gemini browsers can render all the sites. The protocol is still evolving and some functionality is experimental. So, it seems to share some similar issues with World Wide Web surfing.

The problem of being able to easily build a web browser from source without requiring a huge number of libraries has been around for a while now. It appears that it will continue to be an issue for independent operating systems and lower resource computers for a long time to come. It would be great to find solutions that would make web browser development less of a monopoly only attempted by major players. I'm surprised groups like the Free Software Foundation don't feel this is an area that should be considered for their High Priority Projects. I guess many believe that as long as there are Free, Libre, Open Source browsers out there that provide source code, it shouldn't matter that it requires a large organization just to build them while building from source is out of reach for the average developer. However, my personal philosophy is that one of the key advantages of Open Source is to be able to build and modify the code for yourself. If I'm unable to do that with a project, it loses a lot of its usefulness for me.

Here's a short but in no way all inclusive list of some web browser projects that avoid using major web libraries such as as webkit and gecko:
https://ladybird.org/index.html
https://www.netsurf-browser.org/
https://github.com/CobaltBSD/neosurf
https://dillo.org/
https://sourceforge.net/projects/dplus-browser/
https://github.com/textbrowser/dooble
https://lynx.invisible-island.net/

That's a quick rundown of the state of alternative browser development. If I've missed any other relevant FLOSS browser or Open protocol options, you can reach me on Mastodon and let me know.
I remember sending in a bug report to the developers of GNU make. They refused to fix the bug because cygwin and msys bash were, in their opinion, the only viable shell options on Windows and the only environments they wanted to officially support. When I tried to build autoconf with a natively built version of make on Windows, it just hung. There's also the problem of using make on Windows without a shell. The command prompt has a limitation of how many characters can be passed to it. Typically, it's not enough to be able to run many of the commands used in standard makefiles. So, using make with a shell on Windows is a requirement to work with typical makefiles from many Free, Libre and/or Open Source software projects.

Several years later, the landscape for Windows has changed. It's still incredibly hard to find a standard port of POSIX shells outside of Cygwin, msys and now msys2 projects. However, there are options. Some of the older options that were around when I reported the bug are winbash (an older version of bash natively ported to Windows) and winZsh (which has not been maintained for a while). More recently, with the port of busybox to Windows in the busybox-w32 project, we have access to a modern shell. That project makes the ash shell available. It can run natively in Windows. The one drawback is that you need to build busybox-w32 on a Linux machine with a cross-compiler. I did recently manage to build ash natively on Windows with a lot of patching and my own custom makefile. Another option is to use midipix to build bash or other shells but it has similar licensing constraints to Cygwin and the msys projects. An alternative that I haven't seen a lot of information about is using bash from WSL via the Windows command prompt. You actually don't need msys or similar environments with this option. You can run a cross compiler and Linux tools via WSL and access them all from a standard Windows command prompt outside of WSL. That opens up a lot of possibilities. There were other projects that were supposed to port shells to Windows that still haven't shared much in the way of results. I remember offering to work with the developers of the mksh to port it to Windows. They said they already had someone working on the port. I've yet to see a publicly available, natively built mksh running on Windows. Plus, with all these Windows shell options, I still haven't seen a fix to the GNU make project. I do continue to patch my builds of make with my own patch for the issue.

WSL is great for development on Windows. Even with WSL, Busybox-w32 and environments like Cygwin, msys2, msys and midipix, I still like the idea of a minimal native build system and shell. I'd like something I can build from source for myself on Windows. I'd also prefer to use tools with more lenient Open Source licenses over GNU GPL and AGPL options. I'm going to be experimenting with replacing the msys environment on my system with more native options that don't obscure my actual file path names and don't require compatibility with GPL licenses to get POSIX style core utility programs to work. I will still need some standard POSIX style utilities and programs if I want to build FLOSS projects that use GNU autotools. However, I've been avoiding using cmake for FLOSS projects that use it by creating my own build files. I may start doing that in the case of some FLOSS projects that use GNU autotools. libressl comes to mind since a change to their build scripts made them no longer work on Windows and I've yet to hear if they'll fix the issue or not. I've been using cDetect, GNU make and pkgconf for my build scripts. I wish someone would come up with a simpler replacement for GNU make that still offered enough flexibility to build FLOSS projects that require make.

The build environment I'm working towards will probably look like the following... I'm building ash from Busybox-w32 natively with my own scripts. I'm using a combination of POSIX style core utilities from projects such as Minix, sbase and BSD. I'm hoping for compatibility with Open Group standards not necessarily with GNU standards for the various utilities. At the moment, I'm using the GNU gcc compiler built from source. However, llvm is a nice option. I just haven't seen an easy way to build it from source on Windows. My main goal is to be able to build all parts of my environment from source code. It may not have as many features or as much compatibility as other development environments available on Windows. However, I like the idea of being able to modify and change the source code of every tool I use whenever I want to. One other thing I'd like to look for is a console program that I can build natively with my C compiler. If I get everything working for Windows, a lot of it will probably port to other environments fairly easily.

I know most people prefer to just download a prebuilt environment or let their package manager do that for them and they don't care about the ability to build every part of their development environment from scratch. However, if this does sound interesting to anyone else, if you're working on something similar or if want to discuss parts of this project with me further, feel free to contact me. You can reach me via Mastodon or Bluesky.
Thanks to everyone who helped make Software Freedom Day 2024 a success. The official highlights page has been moved to https://digitalfreedoms.org/en/sfd/blog/software-freedom-day-2024-highlights

We hope you'll join us for future Software Freedom Day celebrations and help us reach even more people.

With FLOSS software, you're free to share your favorite programs with your friends.
With that in mind, I'd like to share some interesting web sites and resources to help you find great Free, Libre and Open Source alternatives to popular commercial software:

https://alternativeto.net/
https://www.opensourcealternative.to/
https://opensourcesoftwaredirectory.com/home-users/last_added
https://www.craftsmanspace.com/free-software/free-alternatives-to-commercial-software.html

You can also check out sites that offer FLOSS for download and package managers that help you download Free software.
https://portableapps.com/
https://chocolatey.org/
https://appimage.org/
https://portable-linux-apps.github.io/
https://github.com/clibs/clib/wiki/Packages
I'm investigating ncurses/pdcurses and various other implementations of the curses library. Since there are several, I thought it would be useful to start a list to keep track of them all.

ncurses
https://invisible-island.net/ncurses/
ncurses is typically the mostly widely used variant of curses.

PDCurses
https://github.com/wmcbrine/PDCurses
PDCcurses has been used for a long time on DOS and Windows machines. ncurses did not originally have a Windows port and still does not include a DOS port. So PDCurses is used in that situation. PDCurses added a simple X11 backend which works with older versions of X and later SDL 1 and 2 backends so that it will work anywhere SDL does. That makes it useable with mobile devices or Webassembly.

PDCursesMod
https://www.projectpluto.com/win32a.htm
https://github.com/Bill-Gray/PDCursesMod
PDCursesMod is a fork of PDCurses that adds a Win32 backend. The original PDCurses only supported console mode in Windows.

NetBSD-libcurses
https://github.com/sabotage-linux/netbsd-curses
NetBSD had it's own version of curses. The version used by Sabotage Linux and some other lightweight Linux distributions is based on the NetBSD version but ported to work on Linux.

TinyCurses
https://github.com/tommyettinger/TinyCurses
TinyCurses is a subset of curses that uses SDL 1.2 for rendering.

incurses
https://github.com/infinnovation-dev/incurses
A minimal implementation of curses for embedded systems.

mcurses.h
https://github.com/yui0/slibs/blob/master/mcurses.h
An implementation of curses as a single header library. It uses termios.

August 2026

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 29th, 2026 12:57 pm
Powered by Dreamwidth Studios