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
Considering how hard it is to get computers (still waiting over a month) and computer parts, now is a great time to look into bringing new life to your old hardware.

While I often see information shared about how Linux brings new life to older computers, my personal experience ( http://www.distasis.com/cpp/slin.htm ) hasn't been as good as some of the glowing articles. When I investigate further, a lot of the successes have been for single purpose servers (typically command line with no desktop support) or single function usage like home theater systems. Many Linux distributions are aimed at the latest hardware and can be just as resource intensive as Windows systems. It's interesting to note that many of the low resource optimizations for Linux originated from the Android project not from the kernel project itself and they are slowly being integrated into the Linux kernel project. Some FLOSS development projects and companies like Google which produces Android don't even want to be bothered with 32 bit systems and want to concentrate on 64 bit only. It can be more efficient to run Linux or other Free operating systems on new minimal hardware like a Raspberry Pi than to try to get something working on an old computer. One can also find systems similar to the Raspberry Pi but supporting X86 so Windows CE and other Windows like software becomes an option. There's even an Android operating system port called Android-X86.

I've often seen Puppy Linux touted as a great system for older computers, but I could never get it to work with my hardware. Slackware is an interesting choice that can be lightweight, but the Lilo boot loader doesn't work for certain types of hard drives and one would need to find a way to independently get grub on those systems. TinyCore Linux is really interesting but it can require a lot of RAM to run properly. Debian has worked on many older systems and there are many great Debian variants. However, even Debian is removing some of their drivers for older hardware. Plus, they've updated to systemd. So, if you want a system you can maintain yourself with minimal dependencies where a package does one thing well per the Unix philosophy, a systemd based OS won't be the way to go.

Some Linux distributions still worth checking out for use with older systems are:
AntiX, a Debian based distribution without systemd
ToriOS, a Debian based distribution catering to older computers
NanoLinux, a TinyCore Linux distribution that uses Nano-X instead of X Windows
Grml, a Debian based distribution, command line, bootable rescue CD

I've also looked into OS options for older computers that were not Linux based. Both FreeBSD and FreeDOS can be more lightweight alternatives than Linux. However, both options typically have less hardware support than Linux. FreeDOS also tends to have more proprietary software and few active Open Source projects available for it. If you're interested in a very lightweight DOS alternative for old hardware, check out the XFDOS project. It offers several Open Source programs for DOS including a lightweight browser.

I've never had any luck with ReactOS. Again, hardware support is an issue. It can run some very complex Windows programs quite well, but it often fails on simple ones I commonly use. While I've recently seen posts that they want to hire development help, I've never found them responsive when I've volunteered to offer my programming skills. Wine seems to be able to run more Windows programs successfully than Reactos and Linux has better hardware support. So, a Linux system with Wine might be a good option for Windows users who want to switch. However, if switching to Linux, I'd personally rather rebuild my Open Source software for Linux rather than try to use it on Wine. I'd love to find some other viable options besides ReactOS. I do remember reading something on the ReactOS forum about a Wine based fork to ReactOS. Haven't been able to find any details though. Some DOS projects mentioned adding partial support for Windows programs using options like HX DOS Extender. However, they only seem to support Win32 console options. I've seen some suggestions of creating a FLOSS OS similar to a Win 3.1 system with a GUI/desktop built on top of a FreeDOS system, but have not been able to find any active projects. Without GUI support for DOS based Windows alternatives, a project like XFDOS using Nano-X seems the best way to go. Nano-X provides basic APIs somewhat compatible with Xlib and Win32 and there's enough support to build FLTK based applications. If anyone finds other viable options in this area, please let me know. I would love to add my programming skills to such a project.

If you have a Windows computer, you can keep running Windows and use FLOSS programs to improve functionality. I've upgraded Windows systems before, but the results are typically sluggish and eventually I end up having to put another operating system on to keep using the machine.
The one thing that seems consistent across platforms is that older versions of operating systems seem to run better on older hardware than newer ones. Developers continue to write software that is more bloated, more complicated and more dependent on other software. Many news sources do not recommend running older operating systems especially Windows. So using older operating systems to keep older hardware alive goes against average advice. If you don't have other options and need to run an older operating system on your hardware, two security concepts to look into are sandboxing and security by obscurity. On Linux systems, Linux containers are a good sandboxing option. You can also try to avoid running as root or admin whenever you access the Internet. You can even disconnect from the Internet completely for security purposes and use options like sneaker net ( http://www.distasis.com/cpp/snet.htm ) to update your systems when needed.

Here are some FLOSS recommendations for low resource or older computers. Some are specifically for Windows or Linux and some are cross-platform portable.


Cross-platform applications:

Web Browser - Netrider
https://sourceforge.net/projects/netrider/

Web Browser - D+
https:/sourceforge.net/projects/dplus-browser/

Web Browser - lynx
https://lynx.invisible-island.net/

Graphics editor - Lodepaint
https://sourceforge.net/projects/lodepaint/

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

Command line graphics editor - GraphicsMagick
http://www.graphicsmagick.org/

Command line sound conversion/player - SoX
http://sox.sourceforge.net/

Music player - MilkyTracker
https://milkytracker.titandemo.org/

PDF viewer - MuPDF
https://mupdf.com/

Ebook reader - Bard
https://github.com/festvox/bard
I have a patched version that works better on Windows.

Windows emulator - BoxedWine
https://github.com/danoon2/Boxedwine


DOS Resources:

DOS distribution - XFDOS
https://sourceforge.net/projects/fltk-dos/

DOS emulator - DOSBox
https://www.dosbox.com/


Windows specific and Windows portable versions:

Web browser - Mozilla Firefox, Portable Edition Legacy 52
https://portableapps.com/apps/internet/firefox-portable-legacy-52

Web browser - Chrome Portable
https://portableapps.com/node/60675

Java - Java Portable
https://sourceforge.net/projects/portableapps/files/Java%20Portable/
Install in CommonFiles subdirectory at the same level as where the portable browsers are installed. Java Portable version 8 works on XP and Vista. I've used jPortable_8_Update_66.paf.exe but later versions will probably work as well.

Web browsers - other options
http://rtfreesoft.blogspot.com/
Haven't tried them, but there are several ports of browsers to older hardware.

Web browser - RetroZilla
https://github.com/rn10950/RetroZilla

Web browser - Supermium
https://github.com/win32ss/supermium

IM - Miranda NG
https://github.com/miranda-ng/miranda-ng

Sandox - Sandboxie
https://github.com/sandboxie-plus/Sandboxie
https://www.sandboxie.com/GettingStarted

Firewall - Simplewall
https://github.com/henrypp/simplewall

Host-based Intrusion Detection System - ossec
https://github.com/ossec/ossec-hids

PDF viewer - SumatraPDF
https://www.sumatrapdfreader.org/free-pdf-reader.html

Image editor - I.mage
http://www.memecode.com/image/

ISO access - WinCDEmu
https://portableapps.com/apps/utilities/wincdemu-portable
If you can't find a copy of WinXP Virtual CD Control Panel for accessing ISO files or it doesn't work on your system, you can try WinCDEmu.

CD and DVD creation - rktools
https://www.microsoft.com/en-us/download/details.aspx?id=17657
This isn't FLOSS, but it's very useful for creating CDs and DVDs from the command line.

GWBasic
https://github.com/microsoft/GW-BASIC
The original source code of Microsoft GW-BASIC from 1983 is available under a MIT license.


Linux/POSIX software:

Window manager - JWM
https://joewing.net/projects/jwm/

Terminal software - urxvt
http://software.schmorp.de/pkg/rxvt-unicode.html


If you have other alternatives (operating systems or FLOSS software) that work on older hardware that you'd like to recommend, please let me know ( http://www.distasis.com/connect.htm ). I would love to find some other options. I'm also actively looking for operating system projects that need (and actually want) volunteers to help port lightweight software to them. Would be interested in hearing how others are coping with keeping older hardware alive. Hope you'll share your own articles, blogs, projects with everyone.
I have not had much luck in finding places to discuss lightweight, portable software alternatives with other FLOSS enthusiasts. If you have any recommendations on best places to do this, please let me know: http://www.distasis.com/connect.htm

I have been able to find lists with recommendations of alternative software. I've contributed to many of them. If you're looking for lightweight options or alternatives to your current FLOSS software, feel free to check out the following resources.

I have my own list of Open Source software alternatives at: http://www.distasis.com/cpp/osrclist.htm
It lists alternatives to common commercial software as well as programs that can perform a specific function. I haven't limited the list to only lightweight software. However, if I know of lightweight alternatives that I like, they've been included.

I started and contributed to the following lists of software:
https://web.archive.org/web/20200226082503/http://www.mingw.org/wiki/Community_Supplied_Links
https://wiki.musl-libc.org/alternatives.html
However, I no longer have access to those wikis and will no longer be keeping them up-to-date. Check my Converting to Open Source list or this blog for information that I'm actively maintaining.

Some other good places to look for lists of alternative software are with the suckless.org and Plan 9 projects.
For one such list, see https://suckless.org/rocks/
You can find some of the source code:
https://git.suckless.org/

There was a discussion of unbloated coding resources on the Puppy Linux forum:
http://murga-linux.com/puppy/viewtopic.php?t=72359
There's also a related blog article:
http://bashismal.blogspot.com/2011/10/unbloated-resources-in-c.html

The K.Mandla and Inconsolation blogs (both written by the same author) are a great resource for lightweight and alternative software.
For some highlights, see https://kmandla.wordpress.com/software/

There are lots of resource lists on GitHub. I finally ran across one that was partially applicable to lightweight alternative programs. I don't agree with their groupings of which programs may be more minimal than others. However, there are some interesting programs listed including some that I typically haven't seen mentioned anywhere else:
https://github.com/xxzozaxx/guides/blob/master/ALTERNATIVES.md

That's all I've been able to find as far as alternative software lists for lightweight and/or cross-platform software. If you know of any other similar lists you'd like to see added to this reference, please contact me.
It's fun to discover new lightweight applications. They work well on newer computer systems as well as older or slower computers and low resource machines like many mobile devices. You can run more of them at once. If they're not well-known, they can actually be more secure sometimes (using the security through obscurity principle). I also personally prefer portable applications. That way, you can use the same programs on any operating system. You don't have to relearn new programs for each system you work with.

It can be quite a challenge to find new lightweight applications. I've read several threads on forums where users post their favorite lightweight applications. Many truly are not lightweight by standards that take into consideration memory usage, lines of code, compilation time and/or number of dependencies (libraries).

One way to find lightweight applications is to look for programs built with lightweight GUIs. I've seen a few comparisons of GUI performance. This one is particularly good because it tests the various GUIs and gives statistics:
https://www.pismotek.com/brainout/content/gui-toolkit-resources.php
I was rather surprised by the SDL2 results. Generally, the time it takes to build a GUI from source is one good indication of complexity. FLTK and SDL both build quickly from source compared to the other GUI frameworks mentioned. So, I was surprised that SDL2 scored so badly on the memory usage tests. I'd be curious to know if SDL 1.2.x (which many systems still use) would show a large improvement. Another surprise was how well Tcl/Tk did in the tests. I typically think interpreted languages have worse performance than compiled ones. It would be interesting to see some statistics on response times for similar applications created with these GUIs.

I often go through various source repositories such as Sourceforge, github, etc. looking for code written using specific user interfaces in order to find new and interesting applications. Standard search engines are another way to search for programs. The user interfaces I'm personally most interested in at this point are FLTK, pdcurses/ncurses, SDL and command line programs. These types of applications are typically more lightweight or designed to do one thing well. Know of any other lightweight GUIs or TUIs (text user interfaces)? Please share your recommendations and why you like them.

There are some nice blogs for finding and discussing minimalistic (or in some cases maximalistic) programs. Unfortunately, many are no longer very active. Some favorites are:
https://kmandla.wordpress.com/
https://inconsolation.wordpress.com/
https://web.archive.org/web/20160304000554/http://www.jaredandcoralee.com/CLIapps.html
http://macrofig.blogspot.com/

If you know of others, I'd love to hear about them.

One can also look for lightweight distributions and see what programs they have in their repositories or read their forums for more suggestions. Some of the interesting distributions to check are TinyCore Linux (uses several FLTK programs), Nanolinux (uses more interesting FLTK programs), Rogue Class Linux (uses several SDL programs), Puppy Linux, AntiX (Debian based), INX ( http://inx.maincontent.net/ ), Absolute Linux (Slackware based), 4MLinux ( https://sourceforge.net/projects/linux4m/ ), OLPC. Typically DSL and Puppy get mentioned when people list lightweight Open Source systems. There's been no active development on DSL in a long time and the forums are very quiet. I also found Puppy a little too resource intensive on one of my older machines. FreeBSD performed much better on that system. Puppy Linux has some interesting discussions in their forums.

Linux systems that work in framebuffer mode using DirectFB, nano-x and other alternatives also typically contain many interesting, unusual and lightweight applications. Nanolinux and Rogue Class Linux are in this category.

One can also look at operating systems and development projects that use more lightweight C libraries (such as uclibc and musl). Those projects typically gravitate to choosing lightweight applications, command line and console based programs and lightweight tools like Busybox and Toybox.

Alternative operating systems often offer interesting lightweight application choices. Syllable and Haiku often use SDL programs and other lightweight applications that are easier to port to those systems. Systems like Minix and ELKS are also interesting to investigate. Minix 3 uses a lot of the programs that BSD systems do, but earlier versions of Minix include some interesting alternatives. XFDOS includes many interesting FLTK applications. Plan 9 is interesting as well, but not many of the programs used on this system have been ported to other systems. Another good place to look for unusual applications is on mobile devices.
Here are some application lists from Syllable and Agenda:
https://sites.google.com/site/syllablesoftware/
http://agtoys.sourceforge.net/

I'd love to find more places to discuss lightweight applications. If you've written an article on the topic, please share it. If you know of a good blog, forum, mailing list or other resource, please let me know ( http://www.distasis.com/connect.htm ). If you'd like to discuss your favorite C/C++ applications further, you're welcome to check out the mailing list: https://groups.io/g/distasis I had a mailing list on Yahoo Groups called CppDesign, but Yahoo is no longer supporting mailing lists. So, the new list on Groups.io replaces my old lists on Yahoo Groups.

April 2025

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 05:06 am
Powered by Dreamwidth Studios