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
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.

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.
Thought it would be fun to consolidate my list of Open Source apps that work via the web. You can use them right in your browser without having to download or install any software.

There are several web/server based FLOSS projects. Plus, it's now easier than ever to convert some popular desktop Open Source projects to the web using techniques such as Web Assembly. I'll add other examples to this list as I find them.

One of the best collections I've found that lists several FLOSS projects designed to work through a browser over the Internet is Libre Projects:
http://libreprojects.net/
It's been around a while, so I don't know how up-to-date the links are but it has some great examples of web based projects that share their source code.

If you're a fan of Audacity, the audio editor, or Tenacity, a great fork of audacity, check out this online fork of the audio editor:
https://wavacity.com/
https://github.com/ahilss/wavacity

Some other projects by the developer of Wavacity:
https://dj.app/
https://life.dj.app/

Here's a video editor:
https://d2jta7o2zej4pf.cloudfront.net/
https://github.com/shamadee/web-dsp

TinyGL has been ported to the web. Click on the graphic examples to see them in action. I personally like the Atlantis example with the whales:
https://github.com/humu2009/tinygl.js

I've a huge fan of the JavaScript aquarium written in under 20 lines of JavaScript. There's also an asteroid game in under 20 lines.
https://web.archive.org/web/20190128002213/http://www.codecouch.com/dansCode/snippets/zoo/index.php
http://www.ozoneasylum.com/24905
https://www.ozoneasylum.com/25666

Here's another interesting online aquarium:
https://lrusso.github.io/Aquarium/Aquarium.htm
https://github.com/lrusso/Aquarium

You can have free web based meetings using Jitsi Meet:
https://meet.jit.si/
https://jitsi.org/downloads/


I've collected the online examples from my educational games list:

2048
https://play2048.co/
https://github.com/gabrielecirulli/2048

Anagramica
http://anagramica.com/
https://github.com/binarymax/anagramica

Everything Attacks
https://github.com/dulsi/everythingattacks
http://identicalsoftware.com/everythingattacks/

Follow Me
https://www.sandeepnambiar.com/follow_me_javascript_simon_clone/
https://github.com/gamedolphin/follow_me_javascript_simon_clone

Hextris
https://hextris.io/

LGames
https://lgames.sourceforge.io/LMastermind/
https://lgames.sourceforge.io/LMemory/
https://lgames.sourceforge.io/

Tuxmath online
https://tuxmath.org/index-en.html?opt_lang=en


More resources:

[profile] kribbel@mastodon.social recommended Stendhal. It requires a login, but it's FLOSS and it looks like it could be a lot of fun.
https://stendhalgame.org/index.php?id=content/account/login&url=/account/mycharacters.html
I've been using SDL for a long while now. The newest version of SDL 3 will require migrating from SDL 2 versions. Like the switch from 1.2.15 to 2, it will once again break backward compatibility. It will remove support for several older platforms and change the API. The good news is that SDL 3 will have a compatibility layer much sooner than SDL 2 did. I'm still patching some of the SDL 1.2.15 programs I use so that they'll work with either SDL 2 or SDL 1.2.15. In my experiences with it so far, patching seems to work better than using the compatibility layer for SDL 1.2 support. SDL 3 will make more use of the GPU and modern graphics libraries and drivers. From what I've read, it'll introduce a new, portable shader language. So, you may now need more than just a C compiler to write programs. I prefer working with a minimal number of languages and compilers and am not looking forward to some of the new changes SDL 3 may bring. This leaves me wondering if I should seek another graphics/GUI library for more of my development.

I've looked into GUIs, TUIs and graphics libraries in the past and I really wasn't thrilled with most of the options out there. Besides SDL, Raylib seems very promising. It doesn't have the variety of FLOSS applications SDL seems to though. Using OpenGL directly can be just as problematic as SDL because its API keeps changing as well. So, GLFW may not be a great strategy either if the OpenGL compatibility it makes accessible has a changing API. Nano-X seems fairly stable and works on a variety of operating systems. Allegro is often used for applications similar to those created by SDL. However, differences between the versions it supports and what platforms those versions offer is also noticeable. I often use pdcurses with an SDL backend, but pdcursesmod works very well on Windows using Win32 and can also support console mode in Windows and BSD-curses and ncurses offers some benefits over pdcurses on POSIX systems. So, while I've found pdcurses built with SDL highly portable and useful (I even added SDL 2 and SDL2_ttf support), programs that build with pdcurses should port easily to other libraries that don't require SDL.

There are some platforms that only work with SDL 1.2.x and are not supported by later versions of SDL. The same will most likely be true for SDL 2 compared to the latest version of SDL 3. I'm wondering if I should keep using and patching the current SDL 2 and 1.2.15 libraries I've been working with or just make the switch to a new library. I'm also wondering if other developers are in the same situation, trying to determine whether to continue with what they have or port what they can to yet another graphics library or a later version of SDL. If there's interest from other developers in continuing to use older versions of SDL because of platforms they supported or portability issues, it would be nice to collaborate in continuing to maintain these libraries. It's easier to find security issues and bugs when there are a group of users rather than just one programmer using it.

I am currently working on backporting the latest SDL 2 helper libraries so that as many as possible work with SDL 1.2.15. That way SDL 1.2.15 can make use of newer features like loading and rendering SVG images, better utf-8 support, etc. I have a patched version of SDL2_ttf that adds functionality needed for sdl_unifontview to work properly. I've also been adding an alternative build system that doesn't require GNU autotools or cmake. It instead uses CDetect and make.

As one of the earlier contributors to MinGW, I use the original MinGW port to Windows and try to avoid the hostile fork of MinGW whenever possible. Unfortunately, many libraries do not maintain compatibility with the original MinGW compiler. The newer the libraries are, the less compatible they typically are. So, while SDL 1.2.15 is no problem to build with MinGW. SDL 2.26.5 is a nightmare. I'm currently looking into some issues related to building it with the original MinGW now. I maintain my own version of w32api based on the last public domain release and have been trying to add enough functionality to it to compile many of the more modern standard FLOSS libraries. I also built SDL 2 on AIX at one point to experiment with running SDL applications on AIX via X-forwarding. So, I have patches for that as well.

I've started a thread on Mastodon:
https://fosstodon.org/@lmemsm/110413981373101611
Would be very interested to hear how others are dealing with the SDL upgrade path and whether they will be upgrading, staying with what they have or seeking other libraries. If anyone's considering the route of maintaining older libraries, I'd be very interested in sharing resources and patches.
I've continued my search for organizing software ( https://lmemsm.dreamwidth.org/25452.html ). I've tried several options available from F-Droid and Google Play. I've run across interesting concepts such as using gamification and rewards systems to encourage new habits or complete large tasks. There are also tools to help set goals (such as Specific, Measurable, Achievable, Relevant and Time-Bound SMART goals), break down tasks, remind when to do a task and track what's completed. With all those apps and even some FLOSS programs out there, I've yet to find anything I'm comfortable working with. Some of the commercial mobile apps have wonderful concepts behind them. However, they also have fees or ads or require you to sign up for a service on the Internet. The F-Droid apps are typically more friendly when it comes to privacy. They don't have ads and most don't require sending personal data over the Internet. They're typically simpler than the commercial apps which can be a good thing. However, it's a matter of finding one that does what you need in a way that's comfortable to you not just what the developers and core users need.

I've been reading a lot lately about flow states and the psychological inertia many experience when they're trying to break out of the flow and do something else. Writers may get lost in writing and forget to break for a meal. A programmer may be so engrossed in a coding project, he or she may not notice the clock and the fact that it's time to go home. Who really wants to miss that? Inertia can also make it hard to start a new task. So, I tried to narrow my search to alarm programs that could notify me when to change focus and switch tasks. There are several timer programs that can time tasks for you and fire off an alarm when the interval to work on a task is over. I decided I wanted something more along the lines of an alarm that notified me at a specific time every day. It was suggested I check out the Google clock program which has an alarm. The alarm certainly got my attention. However, I couldn't turn it off without turning off my phone completely and it could easily annoy people around me.

I finally decided to overcome my own inertia and stop searching for a solution and just write one. I used SDL because it ports to a number of platforms including mobile devices. I broke the job up into tasks and started with the most crucial pieces I needed. I figured it would be more difficult to come up with a file format and source code to decipher multiple alarm times, so I started by hard-coding the time. Then, I switched to passing the time via the command line. Once I got that working, I realized, I don't really need to store several alarm times in an initialization file for the program. Using the Unix philosophy of doing one thing well, I decided to leave that task to another program and call this one just to display one alarm. So, one could combine this program with another program like remind or one could use cron or Windows task scheduler to start this program when needed.

What I really wanted was a way to gradually shift gears when I'm heavily concentrating on something. I did not want a jarring alarm. I wanted something that would give me time to complete what I'm doing and transition to something else. I really liked the Toastmasters concept of using green, yellow and red signaling to decide when to end an ongoing talk. So, I started with the color concept. I added a way to play an optional wave file with it. By limiting what the program did to just handling the alarm related tasks, I was able to get it done in a fairly reasonable amount of time.

While I was searching for useful organizing and scheduling programs, I experimented with remind. I found it very promising, but it takes some work to create the entries you want to be reminded about. The main drawback is that its designed for Linux and the developer would prefer that it not be ported to non-Free operating systems. While it can be ported, I'd prefer to work with software created by developers who want to support multiple platforms. I do like the idea that it's a command line tool and can be customized using a text file. Instead of using todo programs, I've been using simple text files to keep track of my lists. I've found that more effective. Something like the todo.txt file used by todo.c and other programs might be an option at some point in the future because it combines the idea of a simple text file with a more programmatic tool. It would be nice to see a todo tool and an alarm tool combined. Possibly if a time is part of each task, a program could parse out times and activate an alarm when needed. So, I'm still searching for the right tools to use together to help improve organization. However, I'm happy to finally have an alarm that offers the features I most wanted.

I'd be very interested to hear how others organize and switch or begin new tasks when they're experiencing inertia. What tools and programs do you use? What works? Also, if anyone is interested in brainstorming putting together different simple tools that each do one task well to help improve organization and efficient use of time, feel free to contact me. Discussion is welcome via Mastodon (https://fosstodon.org/@lmemsm) or the distasis mailing list on groups.io.
I'd looked for personal information managers, todo and organizational programs and even countdown timers before. However, recently I started looking at some of the options at F-Droid which prompted me to look at the lightweight, cross-platform programs I've found in this category again.

fltdj ( http://www.geocities.ws/letapk/thedailyjournal.html ) is a great option if you need a lightweight personal information manager. It uses FLTK as its GUI library. Some other interesting options I previously tracked down and tried were hyperlist which works with SDL 1.2.15 and tux_todo which is also FLTK based. I haven't worked with hyperlist or tux_todo in a while and I don't see their source code available online any longer. While they are lightweight, I felt some more user friendly options might be a better match for me. OTK ( http://otk.sourceforge.net/ ) is an interesting cross-platform GUI based on OpenGL. Two user-friendly applications for OTK are StopWatchTimer and countdown_timer. Another program I discovered a while ago was rcard ( https://sourceforge.net/projects/rcard/ ), a contact management program that uses pdcurses/ncurses. It can work with files in vcf format.

I recently searched for console based todo list programs. There are also several console based options mentioned at the Inconsolation site ( https://inconsolation.wordpress.com/ ). I searched through several of them trying to find the more portable options. I also searched various code archives looking for cross-platform portable C programs in this category. Most of what I found was fairly simple. Here's a list to date which I've tried to break down by functionality.


Habit trackers:
habit (cli) https://github.com/iestynpryce/habit
habit-builder-challange-30days (cli) https://github.com/ethemsvg/habit-builder-challange-30days

todo.txt based programs:
ctodo (ncurses/pdcurses) https://github.com/nielssp/ctodo
Todo.c (ncurses/pdcurses) https://github.com/Sir-Photch/Todo.c
todo-C (cli) https://github.com/29rohitkr/todo-C
The following works cross-platform if you comment out the wordexp related code for systems that don't support it:
todo.c (cli) https://github.com/hit9/todo.c
todocmd (cli) https://github.com/iiAtlas/todocmd
todocmd (cli) https://github.com/cfolwell/todocmd

Other scheduling programs:
memo (cli) https://github.com/anttiviljami/memo
tasktimes (cli) https://github.com/timpark/tasktimes


Another FLTK based organizer program that I recently compiled was MUPO ( http://www.jwwulf.de/de/apps/mupo/intro_en.htm ). Needed a few modifications to work with FLTK 1.4.x, but it does compile, build and run.

As to finding a good FLOSS todo organizer for Android devices, I'm still looking. However, F-Droid offers several options. Editors that are designed to work with todo.txt files are another option available on Android.

If anyone has other suggestions for lightweight and portable organizer and timer applications, please let me know. I'll be adding to this list as I come across other alternatives.
Wanted to write down my notes on signing tools before I ended up losing the information. I was researching what's available in FLOSS signing tools for signing software packages for lightweight Linux distributions. Programs I found that could do that job are listed below.

The one I liked best was usign. The main reason, it's portable and I found it easy to build even on systems that didn't support POSIX. It also doesn't rely on any outside libraries. So, no need to worry about whether you have all the dependencies on your system. Signatures and keys are compatible with OpenBSD's signify utility.
https://github.com/xypron/usign

Most newer signing tools seem to be based on the concepts used by the OpenBSD signing tool, signify. signify uses the ed25519 cryptographic algorithm. It can be used to replace tools like PGP under certain conditions such as for providing some security when working with and installing software packages. There's more information on signify here:
https://www.openbsd.org/papers/bsdcan-signify.html

A portable version of the BSD signify tool is available:
https://github.com/aperezdc/signify
It requires libbsd to build. There's an older Windows port:
https://github.com/stoeckmann/signify-windows

I wanted something with fewer dependencies and asignify provides that:
https://github.com/vstakhov/asignify
It was inspired by signify. However, it's mainly geared to POSIX compatible systems and requires termios to draw to a terminal screen.

Another option I found that looked promising was minisign:
https://github.com/jedisct1/minisign
https://jedisct1.github.io/minisign/
It requires libsodium and was written by the author of that library.

I also ran across sign:
https://github.com/apankrat/sign
It needs openssl or libressl and was also designed for POSIX systems.

So, of all the options, the only one that had minimal dependencies and no trouble building on operating systems that might not be POSIX compatible was usign.

Since these programs are all mainly using the ed25519 algorithm, it left me wondering if an option might be available that uses libtomcrypt or bearssl since both those dependencies are already on my system. That would cut down on some repeated code. For the present, usign seems sufficient.

I saw some lightweight Linux distributions mention in their documentation that they're using or investigating adding package signing to improve security when working with their systems. I do have my own package manager. At the moment, it mainly uses checksums to check if packages download properly and are what you expect them to be. Not sure how I'd add signed packages to my workflow. My package manager is designed more to work with source code and download the source directly from the web site of a program or library. Sites typically only provide some kind of checksum information such as md5 or sha1 or sha256. If others are using signatures and keys with their workflow when building or sharing packages built from source, I'd be very curious to hear about the processes you're using and how you've integrated it. Please let me know. Since I'm not incorporating signed packages at present, wanted to make sure I summarized the information on FLOSS programs that could handle the signing task in case I might need them in the future.
While I have other lists that cover a variety topics, wanted one that just had useful lightweight C programs, utilities and libraries. So, I'll be repeating some links here. However, I hope to add some new projects as well. I'd also be interested in hearing suggestions that fit the criteria of lightweight, cross-platform C projects. If you're aware of any I've left off this list, please let me know.

bard
Ebook reader with text-to-speech support using SDL and flite. I have some patches for this program to improve portability and support using SDL2.
https://github.com/festvox/bard

BearSSL
Rather secure implementation of the SSL/TLS protocol. Can be used with curl.
https://bearssl.org/

cal
Command line calendar.
http://unicorn.us.com/cal.html

cDetect
C based alternative to GNU configure/autoconf. More info at IngwiePhoenix's cDetect project ( https://github.com/IngwiePhoenix/cDetect ). Plus, I've forked the project and use it with many of my builds from source code. I've added support for cross-compiling and many, many other features. Contact me if you'd like a copy.
http://cdetect.sourceforge.net/

csvutils
CSV command utilities. Uses libcsv.
https://github.com/rgamble/csvutils

curl
Command line data transfer tool.
https://curl.se/

diction and style
Analyze documents for readability and other metrics. Find grammatical issues.
https://www.gnu.org/software/diction/

diff
diff implementation for sbase. Check the follow-up mailing list threads for further patches.
https://lists.suckless.org/dev/1601/28247.html

diffh
Works with diff and creates an easy to read display of differences between files.
https://sourceforge.net/projects/diffh/

dr_libs
Single file header audio decoding libraries.
https://github.com/mackron/dr_libs

easylzma
Public domain compression and extraction library for lzma.
https://github.com/lloyd/easylzma/tree/master

fcurl
Library to simplify working with curl.
https://github.com/curl/fcurl

BSD gettext
Older BSD gettext/libintl implementation. I have a fork of this one as well. Also, check out the BSD Citrus Project.
https://www.mmnt.net/db/0/18/ftp.khstu.ru/pub/unix/distfiles

gifsicle
GIF animator utility.
http://www.lcdf.org/gifsicle/

grafx2
Graphics editor.
http://grafx2.chez.com/

BSD gzip
BSD version of the gzip compression/decompression program. There are various forks to port this to operating systems other than BSD. I have a portable fork as well.
https://github.com/NetBSD/src/tree/trunk/usr.bin/gzip

less
Less is more than more, pager program.
https://www.greenwoodsoftware.com/less/

libcsv
ANSI C library to read and write CSV files.
https://github.com/rgamble/libcsv

libgrapheme
C99 Unicode library including encoding, decoding and line-break functionality.
https://libs.suckless.org/libgrapheme/

liblzw
Library for LZW (.Z) compression/decompression.
http://freestdf.sourceforge.net/liblzw.php

libtomcrypt
Public Domain cryptography library.
https://github.com/libtom/libtomcrypt

libutf
C89 UTF-8 library which includes an API compatible with Plan 9's libutf plus a number of improvements.
https://github.com/cls/libutf

lxsplit
Command line file split/join tool.
http://lxsplit.sourceforge.net/

man
C program to view standard man pages. Now part of Elks (elkscmd/sys_utils).
https://github.com/jbruchon/elks/blob/1b6110b73fbb123021a5a29b05d8fa9caef33235/elkscmd/sys_utils/man.c
https://github.com/rofl0r/hardcore-utils/blob/master/man.c

mandoc
BSD version of man page utilities. Uses their manpage format. Includes tools to convert to manpage format used by most man tools.
http://mandoc.bsd.lv/
https://embedeo.org/ws/doc/man_windows/

minicpio
Mini cpio compression and decompression routines.
https://github.com/rayae/minicpio

minizip library
A zip library for zlib. Useful when working with files in zip format. Code is in the contrib section of zlib.
http://zlib.net/

nanosvg
Lightweight SVG library.
https://github.com/memononen/nanosvg

ncurses hexedit
Curses based hex editor.
http://www.rogoyski.com/adam/programs/hexedit/

nemini
Lightweight SDL2 based Gemini client.
https://github.com/neonmoe/nemini

BSD patch
BSD fork of the patch program. I have a fork of this as well with some portability additions to better handle carriage return/line feed issues.
https://github.com/openbsd/src/tree/master/usr.bin/patch

pdfconcat
Concatenates PDF files.
https://github.com/pts/pdfconcat

pdftxt
Convert PDF to text. Helpful for searching PDFs with grep.
https://litcave.rudi.ir/

pdlzip
Compression/decompression for lzma format compatible with the lzip data compressor.
https://www.nongnu.org/lzip/pdlzip.html

picaxo
Graphics viewer.
http://gigi.nullneuron.net/comp/picaxo/

pkgconf
Drop in replacement for pkg-config with no circular dependencies.
https://github.com/pkgconf/pkgconf

pspg
Postgres pager provides a console based pager for PostgreSQL, MySQL, CSV and other formats. Uses ncurses (or pdcurses).
https://github.com/okbob/pspg

sbase
Efficient implementations of core base utilities.
https://core.suckless.org/sbase/

shot
Command line screenshot program.
https://github.com/rr-/shot/

sox
Sound exchange utility. Converts sound formats. Plays audio files.
http://sox.sourceforge.net/

stb
Public Domain single file header libraries. Includes stb_truetype.h, a lightweight alternative to the freetype library, which can parse, decode and rasterize characters from truetype fonts.
https://github.com/nothings/stb

TinyLZMA
Minimal LZMA compressor and decompressor.
https://github.com/WangXuan95/TinyLZMA

unarr
Decompression library for rar and other formats. Part of sumatrapdf project.
https://github.com/sumatrapdfreader/sumatrapdf/tree/master/ext/unarr
Standalone version of unarr.
https://github.com/selmf/unarr

x509cert
Generate x509 certificate requests. Works with BearSSL.
https://github.com/michaelforney/x509cert
I'm still looking for lightweight alternatives to work with and display Postscript or SVG files. I've previously compiled some of the information I've found on PDF and Postscript related programs here: https://lmemsm.dreamwidth.org/3702.html As mentioned, programs such as abcm2ps, lcal, pcal and others output to Postscript. So, I wanted to find a lightweight way to view the output. The abcm2ps program can also output to SVG. One thought was to convert Postscript or SVG to PDF and view the files with mupdf. So, far I haven't found a solution I've been happy with.

I wanted to avoid heavyweight programs and dependencies such as Ghostscript and librsvg. I've been using nanosvg for SVG files. There's an example svgview utility that comes with it. SDL2_img now supports SVG using nanosvg, so you can load and view images that way. I often use picaxo for quick image viewing and since it uses SDL2_img, it's able to support display of some SVG files. I've also been experimenting with an older version of mupdf that was released under a GPLv3 license. Along with adding cbr support (thanks to a FLOSS library from sumatrapdf), I added SVG support using nanosvg. I haven't tried the latest release of mupdf, but I did try a version a few years ago and nanosvg did a better job of handling SVG files than the mupdf code at the time.

I recently found an interesting lightweight SVG to PDF converter than uses nanosvg and libharu. Thought it might be worth checking out. It's called svgtopdf: https://github.com/MichaelMorozIQDirect/svgtopdf There's also a fork with some improvements at: https://github.com/Erroneous1/svgtopdf/tree/improvement/CurveTo As in the other solutions I've tried, it works well for some SVG examples but not others. I thought it was a very clever idea though. Biggest drawback with the program is that there's no information on licensing. I can't tell whether it would qualify as a FLOSS program or not. Would be nice if the author clarified the situation. It's written for Windows, but I believe it would be fairly easy to port to other operating systems.

I haven't found the solution I've been looking for, but trying svgtopdf did give me an excuse to update my libharu build scripts. I've switched them from using cmake to using CDetect, pkgconf and make. The library builds and works quite well. Haven't tracked down all the bug fixes and patches since version 2.3.0 and I don't think there have been any official releases since then. However, if I find some other programs I need that depend on it, I'll definitely look into updating the source with some of the patches others have created for it. Seems like it could be a useful library.

I am still trying to find utilities that handle rendering abcm2ps output properly. So far, I've found no lightweight solutions. Heavyweight browsers or Ghostscript can handle the situation, but I'd really like to find alternatives that are easier to build from source and would be more efficient on very low resource computers.

Also ran across an interesting C program to concatenate PDF files called pdfconcat:
https://github.com/pts/pdfconcat
I asked on github about the license since it wasn't indicated and just found out from the developer that the license is GPLv2. Looks like a nice program. Definitely worth sharing.

If you know of other lightweight SVG, Postscript or PDF utilities or conversion programs with minimal dependencies, I'd be very interested to hear about them.
Whether you celebrate 8 days of Hanukkah, 12 days of Christmas, 7 days of Kwanzaa or anything else, it's always nice to have presents. With supply chains backed up and health hazards of shopping in crowded locations, this year is a great time to consider homemade presents.

I know many believe you get what you pay for me and that homemade gifts are not worthwhile. However, consider the time, effort and manpower that went into making a homemade gift. If you had to monetize it by paying someone else to do the work for you, with today's rising inflation, it would certainly cost a pretty penny to hire someone to do the job. Often a homemade gift has more intrinsic value that the latest cool commercial gadget or game.


Here are some gift ideas for the season...

Coloring

Coloring has been found to be a useful stress reduction activity. Give yourself the gift of a homemade coloring book using public domain clip art. You can also give your finished artwork or handmade holiday cards to others as a present.

Public Domain snowflake clip art to get you started:
https://www.rawpixel.com/board/1308894/vintage-snowflakes-wilson-alwyn-bentley-i-high-quality-cc0-images

Some other places to find artwork to color:
https://openclipart.org/faq
https://www.pdclipart.org/
https://publicdomainvectors.org/
http://commons.wikimedia.org/wiki/Main_Page

You can also create your own designs to color with free programs like TuxPaint and mtPaint ( https://github.com/wjaguar/mtpaint_handbook ) and rgbPaint ( http://mtpaint.sourceforge.net/rgbpaint.html ).

Exercise

Give yourself the gift of exercise. Why wait until your New Year's resolution to go to the gym when you can start exercising now and feel better for it? Studies have shown Vitamin D from sunlight can help protect against diseases ( https://www.sciencedaily.com/releases/2021/09/210915095408.htm ). Awe walks can have positive health effects and improve your mood more than walking just for the exercise ( https://pubmed.ncbi.nlm.nih.gov/32955293/ ). Try an early morning walk outside and enjoy the beauty of nature or try doing a Tai Chi form, QiGong exercise set or some yoga out in the sunshine. See how you feel afterwards.

Books

A book can be a wonderful gift.
Here's one of my favorite science fiction books:
http://www.gutenberg.org/ebooks/18137
It even includes a furry protagonist. Hope others enjoy reading it as much as I did.

Here's a list of free books that could make nice presents:
https://lmemsm.dreamwidth.org/13112.html

Books don't have to be fictional to be fun. Check into the many wonderful public domain hobby related books such as recipe books available online. You can also create your own and share it with others.

Want to find more ideas for books to read? Check out the reviews at BookWyrm
( https://bookwyrm.social/ ) or share some of your own reviews. If the book you want to read is not in the public domain, check archive.org or online resources from your local library to see if they can help you access it.

Movies

Some movies and TV shows with well known characters are actually in the public domain. So if you're in the mood for a literally free movie, check some of these out.

Mysteries

https://archive.org/search.php?query=charlie+chan&and[]=mediatype%3A%22movies%22&and[]=year%3A%221973%22&and[]=year%3A%221966%22&and[]=year%3A%221949%22&and[]=year%3A%221948%22&and[]=year%3A%221945%22&and[]=year%3A%221943%22&and[]=year%3A%221942%22&and[]=year%3A%221941%22&and[]=year%3A%221940%22&and[]=year%3A%221939%22&and[]=year%3A%221938%22&and[]=year%3A%221937%22&and[]=year%3A%221936%22&and[]=year%3A%221934%22&and[]=year%3A%221931%22&and[]=year%3A%221917%22&and[]=subject%3A%22mystery%22&and[]=subject%3A%22Charlie%20Chan%22

Action and adventure

https://archive.org/search.php?query=superman&and[]=mediatype%3A%22movies%22&and[]=year%3A%221948%22&and[]=year%3A%221947%22&and[]=year%3A%221944%22&and[]=year%3A%221943%22&and[]=year%3A%221942%22&and[]=year%3A%221941%22&and[]=year%3A%221940%22&and[]=year%3A%221939%22&and[]=year%3A%221938%22&and[]=year%3A%221937%22&and[]=year%3A%221936%22&and[]=year%3A%221932%22&and[]=year%3A%221930%22&and[]=year%3A%221920%22&and[]=subject%3A%22superman%22

https://archive.org/details/TARZANOFTHEAPESPUBLICDOMAINVERSION
https://archive.org/details/silent-the-adventures-of-tarzan
https://archive.org/details/TheAdventuresOfTarzan1921USAedicinAmericana.3gp
https://archive.org/details/silent-the-son-of-tarzan

Science Fiction

https://archive.org/search.php?query=Flash%20Gordon%20Conquers%20the%20Universe%20taylor%20AND%20mediatype%3Amovies
https://archive.org/details/PurpleDeathFromOuterSpace

https://archive.org/details/planet_outlaws_ipod

You can find more movies and adventures by searching archive.org.
You can also look through the listings at this site:
https://www.openculture.com/freemoviesonline

Here's some information on a radio play based on a popular movie series which includes material from my favorite author:
https://www.openculture.com/2020/05/the-original-star-wars-trilogy-adapted-into-a-14-hour-radio-drama-by-npr-1981-1996.html

Stargazing

Stargazing gives you something to do with your time that's aesthetically pleasing and a good learning experience. You can find out about constellations, planets and moons.

To help you get started, here are some free programs for your PC and phone that can help guide your star search.
https://f-droid.org/en/packages/org.tengel.planisphere/
https://f-droid.org/en/packages/com.google.android.stardroid/
http://nightsky.sourceforge.net/
https://portableapps.com/de/apps/education/stellarium_portable
https://portableapps.com/apps/education/celestia_portable

Games

What good is a gift idea list without the mention of games? From Free, Libre and Open Source computer games for your electronic devices to Creative Commons and public domain books about how to play a wide variety of games, there are several great resources for finding and sharing free games.

Here's my list of educational games for computers and mobile devices:
https://lmemsm.dreamwidth.org/15912.html
Know of others? Please share them.

You can play games remotely via: https://www.freeboardgames.org/

Birding

Give to others by giving the birds a gift this year. You can create bird feeders from recycled materials. You can also start planning your gardens and include some bird, animal and environment friendly plants. The birds may even give you a gift in return with some beautiful bird songs.
You can watch birds anytime virtually:
https://www.allaboutbirds.org/cams/cornell-lab-feederwatch/
It's also fun to learn how to identify the different types of birds that visit your neighborhood. Check out some of the free bird identification resources online such as public domain birding books and the e-bird program.

Giving to Others

Sometimes the best gift is sharing your time and skills with others.

This year, how about volunteering to help a Free, Libre, Open Source software project? You don't have to be a programmer to help out. They also need beta testers, artists, translators, help writing documentation and guides and help with other tasks. How fun would it be to beta test some computer games and be helping FLOSS projects at the same time?

There are also several Creative Commons projects in need of resources such as artwork, creative writing, multimedia recordings and more. You can add your creative works to a site featuring Creative Commons material using a CC license. You can also volunteer to help out various CC projects and web sites.

You can also help projects like these by advocating for them. Get involved with events like Software Freedom Day to help spread the word about great FLOSS and CC resources. Use FLOSS sites such as Get Together ( https://gettogether.community/ ) and Mobilizon ( https://instances.joinmobilizon.org/instances ) to share events. Use FLOSS programs ( https://lmemsm.dreamwidth.org/14124.html ) to host them virtually.

If you have a web site or blog or develop sites, help by making them more accessible. Find out more from projects like https://anybrowser.org/ and sites that discuss web accessibility such as 508E guidelines and A11Y best practices.

Continuous learning helps with brain health and neuroplasticity. Learn something new and help the world by volunteering your scientific skills. There are several citizen science projects in need of volunteers.

You can find more volunteer related links here:
https://lmemsm.dreamwidth.org/18603.html


Wrapping Up

Those are some of my gift ideas for now. You can also check earlier posts for holiday ideas from previous years. If you have other free resources you recommend, I'd enjoy hearing about them. Give a gift this year by sharing your own ideas, creativity and resources with others.
Here are some of my favorite health related programs. The ergonomic programs are useful if you're spending long hours in front of your computer. The recipe and nutrition software can be used to improve your nutrition.

Ergonomic software

Workrave - available for Windows and Linux/POSIX operating systems
http://www.workrave.org/
https://portableapps.com/apps/utilities/workrave_portable

PrevRSI - available for Windows
http://prevrsi.sourceforge.net/

Xwrits - available for Linux/POSIX operating systems, X Windows based without a lot of GUI dependency libraries
http://www.lcdf.org/~eddietwo/xwrits/

Eyes' Thanks - available on Windows and other Qt supported platforms
https://github.com/yalov/eyes-thanks

Resto - available on Windows and other Qt supported platforms
https://github.com/Justyna-JustCode/Resto

RSIBreak - available on Linux and other KDE supported platforms
https://userbase.kde.org/RSIBreak

Gnome Break Timer - available on Linux and other GNOME supported platforms
https://gitlab.gnome.org/GNOME/gnome-break-timer/

Safe Eyes - available for POSIX compatible systems
http://slgobinath.github.io/SafeEyes/

Enso Retreat - available on Windows
https://github.com/GChristensen/retreat

Eyes Guard - available on Windows
https://github.com/avestura/EyesGuard

RestStop - available on Windows
https://gazugafan.github.io/RestStop/

WristSaver - available for Mac OSX
https://sourceforge.net/projects/wristsaver/

Stretchly - available on Windows, Linux, FreeBSD, Mac OSX and anywhere else Electron will run
https://github.com/hovancik/stretchly

BreakTimer - available on Windows, Linux, Mac OSX and Electron supported platforms
https://github.com/tom-james-watson/breaktimer-app

wnr - available on Windows, Linux, Mac OSX and Electron supported platforms
https://github.com/RoderickQiu/wnr

Chime - available on Mac OSX and Electron supported platforms
https://github.com/erdogany/chime

Aktivpause to Go - break reminder with exercises for Android
https://apt.izzysoft.de/fdroid/index/apk/org.secuso.aktivpause

Pausing Healthy - break reminder with exercises for Android
https://f-droid.org/en/packages/org.secuso.privacyfriendlypausinghealthily/

Mindfulness at the Computer is a breathing reminder - available for Windows, Linux, Mac OSX
https://sourceforge.net/projects/mindfulness-at-the-computer/

Breathing - available for Linux
https://github.com/SeaDve/Breathing

Breathe - available for Pebble
https://github.com/aaronhktan/exhale

Brethap - breathing app for Android
https://f-droid.org/en/packages/com.jithware.brethap/

Breathly - breathing app for Android
https://f-droid.org/en/packages/com.mmazzarolo.breathly/

Medito - meditation app for Android
https://apt.izzysoft.de/fdroid/index/apk/meditofoundation.medito

Mindfulness Meditation - meditation app for Android
https://f-droid.org/en/packages/biz.binarysolutions.mindfulnessmeditation/

Be Well - heart rate monitor
https://apt.izzysoft.de/fdroid/index/apk/com.bewell.lite

Virtual Magnifying Glass - available for Windows, Linux, FreeBSD, Mac OSX
https://sourceforge.net/projects/magnifier/
https://portableapps.com/apps/accessibility/virtual_magnifying_glass_portable

Adapt screen brightness/temperature on Windows and POSIX systems with Gammy:
https://github.com/Fushko/gammy
https://github.com/Fushko/gummy

Changes the color temperature of your monitor to better match that of your surroundings on Linux and Windows systems:
https://sourceforge.net/projects/redshiftgui/

Adjust colors of screen based on time of day on POSIX compatible systems:
https://wiki.archlinux.org/index.php/Redshift

Adjust colors of screen based on time of day on POSIX compatible systems:
https://github.com/maandree/blueshift

Iris Floss is a blue light reduction program for X11:
https://github.com/yurrriq/iris-floss

Gammastep adjusts screen colors for Linux systems:
https://gitlab.com/chinstrap/gammastep

Red Moon for Android:
https://github.com/LibreShift/red-moon

Fake Dawn is a gradual light alarm for Android:
https://f-droid.org/en/packages/org.balau.fakedawn/

Fall Detector for Android:
https://github.com/altermarkive/experimental-fall-detector-android-app
https://apt.izzysoft.de/fdroid/index/apk/altermarkive.guardian

Nutrition and Recipe software (cross-platform)

NUT - Nutrition software
https://sourceforge.net/projects/nut/

Gourmet - Recipe Manager
http://thinkle.github.io/gourmet/

EnRecipes - Offline recipe manager for Android.
https://f-droid.org/packages/com.vishnuraghav.EnRecipes/

Waistline - Libre calorie counter and weight tracker for Android built with Cordova
https://github.com/davidhealey/waistline
I've covered SDL and FLTK based applications. Now I'd like to discuss pdcurses and ncurses based ones. ncurses is found on many POSIX systems especially Linux. pdcurses was used primarily on DOS and Windows systems. Support for X and SDL was later added. The X support uses some legacy functions, so it doesn't build well on modern Linux systems. However, the SDL support allows pdcurses to be ported to any system that supports the SDL library. That means it can run on systems like Syllable and Haiku not just POSIX systems with X Windows. ncurses worked only on POSIX systems for a long time, but more recently support was added for Windows and MinGW32.

So which is the better library to use? Depends on your needs. ncurses is very stable, provides good Unicode support on many operating systems and offers added functionality like panels, menus and forms. On POSIX systems, it runs in console mode, so you can run applications outside X Windows (or Wayland) or on systems with no X Windows installed. Applications built with ncurses can also be used via ssh and telnet. Unicode support for pdcurses is currently limited to UCS-2 (16 bits). It designed in such a way that expansion to UTF-8 or UTF-32 would mean major changes. It works in console mode, but on DOS/Windows only. You'll typically need X Windows if you run pdcurses on a POSIX systems. There are some work-arounds to this. You can use DirectFB or nano-x to run SDL in framebuffer and use pdcurses with the SDL backend. However, applications run in framebuffer mode aren't usable with ssh and telnet. You'll need something like vnc to remotely access them. There is also a pdcurses fork called win32a which provides native Windows support and better support for colors. pdcurses has some functions that are not typically standard with ncurses/curses such as specific mouse and clipboard functions. However, it lacks a lot of the extras that ncurses adds such as menu and form support. Both pdcurses and ncurses have functions for the standard ASCII character set and for wide characters (wchar). However, keep in mind that wchar is 16 bits on Windows (and DOS djgpp) systems and 32 bits on most POSIX systems (such as Linux and BSD). Personally, I prefer to use UTF-8 whenever possible for Unicode. I also prefer the new char32_t (or uint32_t if not available) in place of wchar_t in all my applications with internationalization support. However, pdcurses/ncurses aren't designed for these options. Of the two libraries, ncurses better supports characters in a Unicode character set beyond the initial 16 bits and is better designed to handle large character sets.

Even though ncurses has many advantages over pdcurses, I still like to work with pdcurses. It's a more compact library, with the backend code separated from the rest of the code to make it easy to port to other platforms. With this design and with its SDL support, it's easy to get pdcurses working on a wide variety of operating systems including some places ncurses has not been ported. As mentioned, libform and libmenu are not a part of pdcurses, but their functionality is available with ncurses. It turns out that other versions of curses did not originally have support for forms and menus and they were separate libraries. BSD still has libform and libmenu that work with its version of curses. I found it very easy to port libform and libmenu to work with pdcurses. There were some bugs in the libraries which I'm surprised no one has fixed yet, but I have patches for them. One other advantage of pdcurses built with SDL is that you can intermix SDL and pdcurses commands. pdcurses/ncurses are primarily console/text libraries. SDL offers graphics support. You can mix graphics from SDL with text from pdcurses and use pdcurses as a text user interface (GUI alternative) for SDL. That's a really nice option when developing SDL applications.

I've added SDL 2.x support to pdcurses, so it will port to systems that support SDL 1.x or SDL 2.x. pdcurses with the SDL backend, used bitmaps to represent characters. That curtailed Unicode support. I've added support to use SDL_TTF for drawing characters. Now the only limitation on characters that can be used with PDCurses is the 16 bit limit to the character size built into the system. It should be possible to expand that to 32 but it would require modifications that would affect the entire design. Also, since curses only supplies ASCII and wchar support for routines, a Windows (or DOS) system would still be limited to 16 bits. One would need a new set of routines with UTF-32 support or UTF-8 support. The current routines could not be used to support 32 bit characters on systems where wchar is limited to 16 bits. The ASCII functions are designed to work with one character at a time not several which UTF-8 might require.

Some of my patches for better internationalization support for pdcurses have been added back in to the official version of pdcurses. All of my pdcurses patches plus documentation on them and my build scripts can be found by following the archive link at http://www.distasis.com/cpp/lmbld.htm I'm interested in adding some of the win32a patches and continuing to improve support for internationalization in the future. If anyone wants to discuss design ideas for continuing to add better Unicode support for pdcurses, please contact me.

The good news with ncurses/pdcurses based applications is that it's relatively easy to port them from one version of curses to another in many cases. It may require changes in the names of header files. Non-portable functions such as those supporting a mouse may not be available on some systems. However, one can typically use any application designed for a particular version of curses with another version of curses. That does not mean ncurses/pdcurses applications can easily be ported to other operating systems. For instance, if an application uses functions that aren't very portable across platforms (such as fork which isn't easy to emulate on Windows and doesn't work on DOS), it will be very difficult to port that application. Unfortunately, many ncurses applications do just that and use POSIX functions that aren't widely ported to non-POSIX systems.

So, let's talk about some of the applications that I've found that do port across a variety of operating systems and can be built with pdcurses.

There are several ncurses based hex editors available. I personally like the interface for ncurses hexedit. It reminds me of the kzap program I used to use with DOS, so I find it user-friendly. shed is another interesting option. It handles large file sizes extremely well.
You can find the programs here:
http://www.rogoyski.com/adam/programs/hexedit/onlinedoc/hexedit.html
https://sourceforge.net/projects/shed/

I have patches/build scripts for ncurses hexedit to work with pdcurses and port to other platforms. I've built shed on Windows before, but haven't created my own build scripts/patch set for it yet.

There aren't a lot of music applications that work well in console mode and provide a text user interface, but there are some. The ones that come to mind are TiMidity++ and GramoFile. Make sure if you intend to work with TiMidity++ that you start with the source from version control not the very old, outdated tarball at Sourceforge. Many features, including better Karaoke midi support, have been added since the tarball was created. I find it discouraging that distributions such as Debian refuse to update to the latest supported version of this project. I always build TiMidity++ from source myself to make sure I have the updates I need. I'm currently working on a build script for TiMidity++ that will allow me to build it as a library so it can be used with other applications. I currently have build scripts for TiMidity++ and freepats (Open Source sound fonts used with TiMidity++) and gramofile.
https://sourceforge.net/projects/timidity/
http://www.opensourcepartners.nl/~costar/gramofile/

I originally looked for library versions of libform and libmenu because I thought a lot of curses applications would make use of these features. Turns out, not as many use it as I originally estimated. One program that makes use of the functionality for these libraries is ckpass. It's a console based password keeper that is compatible with KeePass 1.x format. That means, if you want a lightweight alternative to the earlier versions of KeePass or KeePassX, you can still have console access to your passwords. The program looks great and it's easy to use. Unfortunately, it offers just read-only support for viewing password information. There's no easy way to modify password information using the program. However, it isn't that hard to add code to allow editing as well as viewing of passwords using libform. I'm working on some modifications to ckpass to give it more functionality, so it will become a useful, more lightweight replacement to other password storage alternatives. There are other command line based password storage options available and some even use portable formats so that you can find cross-platform solutions. However, I like the idea that ckpass supports the KeePass 1.x format which many other GUI password programs also use. This is the link to the original ckpass project:
https://sourceforge.net/projects/ckpass/

The final category I'll cover is the text editor category. There are a great many text editors that work in console mode or build with ncurses as can be seen from the listings at TextEditors.org ( http://texteditors.org/cgi-bin/wiki.pl ). However, the large majority of them are not highly portable.

When the competition between vi and emacs comes up and people start debating what should be the default editor on a Unix or Linux system, I typically skip both and go with nano. nano was based on the pico text editor. It wasn't a fork. It was coded from scratch, so there would be no issues with code licenses. pico was the main editor for the alpine mail system. Compared to other editors with unusual key sequences that you need to memorize to get anything to work, I find it very user-friendly. It has a menu and easy access to help if you forget what command keys you need to perform a specific function. My personal preference is to use a programming editor that will allow you to map key commands however you see fit. That avoids large learning curves if you didn't originally use vi or emacs as your first text editor and memorize their commands. However, if a text editor with keymapping support is not available, a user-friendly text editor with easy to access command menus and help descriptions is a good second choice. Most POSIX systems I work with have either pico or nano available or they can be installed fairly easily. So, if I need to do a quick edit from the console on a POSIX system, my default editor is typically nano or pico. One major drawback to pico is that it only handles one file at a time. You cannot have multiple files open and flip between editing them or cut and paste between them. nano adds support for multiple files, but the commands to switch aren't particular easy to remember.

I did a port of nano to Windows several years ago. There's a lite way to build nano (tiny) and a way to build it with more functionality. Building it the lite way and adding some modifications for porting, I was able to compile it successfully on Windows. So, while it didn't provide all the functionality I used on POSIX systems, it did work on Windows. A few years ago, I found a Windows port of nano on github. It didn't provide extra functionality, but it was interesting to see how the author went about porting the application and the differences between my port and that one. According to the nano editor FAQ, it now looks like there's some official support for Win32. However, when I tried to build the latest version, I still ran across a lot of the same issues as when I built previous versions. Only the lite version is supported for Windows. There were some assumptions about MinGW types that aren't true for all versions of MinGW. Rather than using configure for what it was designed for and testing if there needs to be a work-around for a particular system, the code has ifdefs that assume MinGW always handles things wrong and tries to fix the situation. In the process, it causes errors in the build for MinGW systems that do handle the situation properly. Guess I'll need to stick with my port or a Windows specific port like the one at github if I want nano to build properly on Windows.

nano is a great lightweight alternative for a text editor that works on a large variety of operating systems. When I need to modify a file and want an editor to quickly call from the command line, it is often my editor of choice. You'll find the source code and more information on nano at:
https://www.nano-editor.org/

As I mentioned, I prefer programming editors that have good support for key-mapping. The scintilla text editing component offers just that. A large variety of Open Source editors, including SciTE (my favorite GUI editor) and fxite (lightweight FOX Toolkit based GUI editor), use the scintilla text editing component. While fxite is lightweight and works well on older systems, it requires X Windows on POSIX systems and the FOX Toolkit to build it from source. I wanted something even more lightweight. I did a search of the various editors that make use of the scintilla text editing component and I ran across textadept. It is a GUI text editor, but there's a ncurses based version that works from the console. I found it relatively easily to build the editor on Windows using pdcurses. So, it's rather portable. If I had to pick a console based editor besides nano and pico, textadept would be it.
https://foicica.com/textadept/

There are ncurses front ends to some applications I work with such as hunspell and prozilla, but I typically don't use the front ends. I prefer using hunspell via command line or integrated with a programming editor. There's a nice FLTK front end for prozilla that is highly portable. One other ncurses based application I'll mention is WordGrinder. I typically see it mentioned on sites and blogs that specialize in discussing console based applications. It has many of the features of a word processor. The current web site for it is:
http://cowlark.com/wordgrinder/

I haven't tried it out, but nanotodon looks like a useful cross-platform client for Mastodon. Was able to get it to build on Windows using pdcurses.
https://github.com/taka-tuos/nanotodon

If you have other recommendations for useful, cross-platform portable ncurses/pdcurses/curses based applications, I'd love to hear ( http://www.distasis.com/connect.htm ) about them. It would be great to add more helpful applications to this list. I'm also very interested in the possibilities of using pdcurses/libmenu/libform as a text user interface (GUI alternative) for SDL applications.
--- Free Software and Patent Policy ---

Patents can inhibit and encumber legal distribution of Free and Open Source software.

One might think that the best way to avoid patent issues would be to stick with Free software and Free operating systems. However, these distributions typically deal mainly with software free of copyright issues not patent issues. Patents may only be issues in some parts of the world and many Free operating systems feel justified in distributing patented code (source code only) as part of their freedom of speech.

Note that Free software and operating systems in this article correspond to the Free Software Foundation's definition of ""Free"" and is not necessarily equivalent to Open Source. The Free Software Foundation provides a list of what they consider Free operating systems at https://www.gnu.org/distros/free-distros.en.html

Debian is a good example of a mostly Free operating system ( https://www.gnu.org/distros/common-distros.en.html ). Unlike many completely Free operating system alternatives, its package repository is so extensive, one can find a variety of useful patent unencumbered options. They've also documented information on their polices regarding patented software. Perhaps surprisingly, the best places to find patent unencumbered and royalty-free operating systems are from commercial sources.

The following links give some information on Debian's policies toward patents and patent issues:


--- Patent Encumbered Software---

It's hard to pin down a definitive list of what software may be patent encumbered. Sometimes, even the developers of the software themselves are vague as to whether the software might infringe on patents or not. So, checking a program's web site for patent information may not always help. Typically, one will find software that uses certain compression/decompression algorithms or supports certain multimedia encoding/decoding on lists of patent encumbered software. Here are some lists of software that may have distribution issues.


--- Patent Unencumbered Multimedia Formats ---

One can help to avoid patent encumbered software by using royalty-free or patent unencumbered alternatives such as some of the following:


--- GIF format and LZW ---

A good example of patent related issues with software is the GIF format. Patents on LZW compression used by the GIF format were a main reason for creation of the PNG format. Even though the related LZW patents have expired, one still sees Free software that uses alternatives like libungif (library that encodes only uncompressed GIFs).


--- MPEG-1 issues ---

According to Wikipedia's article on smpeg ( http://en.wikipedia.org/wiki/SMPEG ), it sounds as if the MPEG-1 format is patent unencumbered. However, upon further reading they contradict the information in their MPEG-1 article ( http://en.wikipedia.org/wiki/MPEG-1 ) and state that a full MPEG-1 encoder/decoder cannot be implemented royalty-free because the MP3 audio format which is part of that standard still has several active patents on it.

One possible solution might be to remove the MP3 support in MPEG-1 software. It would be enough to allow viewing of educational information such as the MPEG 1 videos at:
HubbleSOURCE - http://hubblesource.stsci.edu/sources/video/clips/

--- Multimedia Patents ---

Information on when some multimedia patents expire:


--- Patent Unencumbered Software Options ---

This list covers software and builds of software that attempt to avoid patented code or code that is not royalty free.
  • xine-lib pruned - http://pkgs.fedoraproject.org/lookaside/pkgs/xine-lib/
    Pruned older version of xine-lib that has patent encumbered code stripped from it. Some lightweight xine front ends that can be used with it include xine-ui, flxine, toxine or vplayer. (Note: When I contacted the Fedora Project offering to help update this to a later version, they were very much against updating the pruned library and very impolite about the situation. I do have a later version of this library with patented code stripped.)

  • sox - https://sourceforge.net/projects/sox/ - Sound eXchange, the Swiss Army knife of sound processing programs, can be built with only royalty free and patent unencumbered libraries and codecs.


Graphics programs that can built with patent unencumbered libraries and codecs include:


---===== FLIC Format =====---



---===== Animated PNG =====---



---===== Animated GIF =====---



---===== Ogg Theora =====---



---===== Ogg Vorbis =====---



The OpusFAQ - https://wiki.xiph.org/OpusFAQ - says that Ogg Vorbis and speex are being replaced by Opus. I haven't seen any Open Source projects specifically switch from Ogg Vorbis to Opus. However, Xiph.Org Foundation developers created Opus to replace Ogg Vorbis and recommend that projects switch to using the newer format.

---===== WebM and VPX =====---



--- Other Possibilities ---

As mentioned, one can remove the MP3 code from smpeg. There's a pruned older version of smpeg that does this. It might then be usable with other libraries and applications such as xine-lib, dumpmpeg.

Twolame - http://www.twolame.org/ - is optimized for MP2 (MPEG Audio Layer 2) and might provide an alternative to MP3.

--- What can you do? ---

The best way to encourage royalty-free and patent unencumbered software is to support Open formats that are patent unencumbered. As consumers, pick devices that can handle these Open formats. Share multimedia in patent unencumbered formats and encourage multimedia providers to offer these formats.

Here's a list of efforts to encourage patent unencumbered options.

March 2026

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
29 3031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 30th, 2026 10:05 pm
Powered by Dreamwidth Studios