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.
This list is to consolidate information on basic CSV related utilities and libraries. If you know of other interesting CSV resources, code or have some tips and tricks for making the most of the CSV format, please share them.

Some useful CSV libraries:

https://github.com/rgamble/csvutils
https://github.com/rgamble/libcsv

https://github.com/wlbr/csvfix
https://github.com/dbro/csvquote

Pager with CSV support:
https://github.com/okbob/pspg

SQLLite can work with CSV.
https://www.sqlite.org/csv.html

I've accessed CSV using PERL and DBI.
https://github.com/perl5-dbi/DBD-CSV

ODBC:
The Microsoft Text ODBC Driver is standard on Windows. So it's free even if it's not Free.
https://support.microsoft.com/en-us/topic/creating-an-odbc-data-source-with-the-microsoft-text-driver-74367d5b-8a17-6310-ce15-a1c47858964a
Hopefully there are drivers for UnixODBC or iODBC. However, I couldn't find any links with a quick search.

I used a wonderful jquery plugin in one of the sites I created. It took a CSV file as input and created a HTML table that could be viewed and sorted. I was also able to add stripes (different colors to alternate rows) using CSS. For accessibility, I gave the direct link to the CSV file in the noscript tag. So, if someone did not want to run JavaScript, they could see the contents in the file rather than on screen in a web browser. Here's the jquery plugin I used:
https://web.archive.org/web/20090227064509/http://plugins.jquery.com/project/csv2table
Code for the project is available here as well:
https://github.com/toshirot/csv2table

LM Ports

May. 19th, 2020 09:00 am
I've mentioned my build system before. I've been trying to find a good way to share the programs I've compiled for Windows, Linux, AIX, Android, etc. However, I still haven't found a good method to do so. Rather than continuing to wait until I find the perfect solution, I've decided to try a temporary solution that's very basic.

I've already been uploading the build scripts to the archive link at my LM Ports page ( http://www.distasis.com/cpp/lmports.htm ). I'm going to start adding some executables and libraries for Windows. I don't have an automated installation program at this point, so some manual work needs to be done to get programs to run. In order to run a program, you will need all the dependencies. So, you need to download the tarball (has txz extension) with the program you're interested in plus the tarballs with the dependency libraries aka dlls. The bldepend.txt file in the build script has a list of what dependencies are needed to build a program or library. The depends.txt file in the tarball package has a list of all the dlls needed for the program to run. Pick a directory on your system. ( I use \mingw\msys\ ) Unpack the required tarballs to the same directory (holding the executable program and libraries/dlls). ( This puts the programs and dlls in \mingw\msys\opt\bin ) Programs like 7zip, 7za, gzip, bsdtar can be used to unpack tarballs. You can run them from the command line or the msys bash shell. If it's a program with a GUI, you can also create a shortcut or run from the file explorer.

I use some tricks to make programs more portable including a couple of specialized libraries and some patches so that the programs don't have to run from the directory they're built for. I don't have those libraries uploaded and ready to share yet. For now, I'm using the standard libintl instead of my modified version. So, internationalization probably won't work well until I can switch to my libraries.

While I'm not interested in changing package managers/build systems, I'm open to suggestions on better/easier ways to make the programs available/accessible to people. The plan was to eventually put together an ISO with several programs and a GUI front-end plus more documentation on how the programs work, but I'm not far enough along in the project to do so yet.

It's a lot of work to try to port programs and keep the build scripts up-to-date. I've just been doing this for myself. So, don't expect any official support on the project. However, I would like to share some of the results with others in the chance that it might be useful to someone besides myself now. If you'd like to encourage the project or get more involved, you're welcome to do so from the CppDesign mailing list ( http://www.distasis.com/connect.htm ). I have Windows builds for several command line utilities, SDL, FLTK and pdcurses based programs and even an X Windows port.
For a long time now, I've been wanting to put together an ISO with Free, Libre and Open Source software similar to the kind our Linux Users Group gave out on Software Freedom Day. I'd like to gear it specifically toward educational software so that groups like Schoolforge may make use of it. If you'd like to help, I would love to have suggestions for lightweight, portable software that can run in console or framebuffer mode. I'm specifically interested in educational, hobby-related, utility, information/organizing and/or word processing programs. Have any recommendations? Please let me know ( http://www.distasis.com/connect.htm ).

Since I'm creating this to promote FLOSS software, I thought it would be great if I could distribute the software on a remastered Linux ISO that could be run from VirtualBox or Qemu or that might boot from a DVD or flash drive. I'd like to try to stick with a console based distribution so that it's lightweight and runs well on older computers with low resources. That means all programs need to be command line, console based (ncurses/pdcurses) or work in framebuffer mode (using SDL 1.x, nano-x, nx11, FLTK, etc.) in order to run on the system without X Windows or Wayland. For efficiency, I'd prefer compiled programs (such as those written in C) to ones that require an interpreter to run. I'd also like to make it as accessible as possible as far as internationalization and for users that may have disabilities. I'm using internationalized language support when possible via gettext. There are utilities like flite and espeak for text-to-speech support. My goal is to put together a lightweight, low resource distribution that will work well for users with older computers and users with no or limited Internet access. There are plenty of things you can do with a computer even if you can't get access to the Internet. Why not make some of those options more readily available?

I'll list some of the software I'm currently considering for the distribution. I'm still missing functionality in several areas, so if you have any recommendations for programs that would fit the criteria I've mentioned, please let me know.


Graphics applications

grafx2 - graphics editor
lodepaint - graphics editor
graphicsmagick - command line graphics editor
picaxo - graphics viewer
perigee slideshow - slideshow viewer
gifsicle - command line tool to create animated GIF files
GLE - command line tool to produce charts
nanosvg - includes lightweight SVG viewer


Music creation/audio applications

I'm still looking for a good Karaoke program (written in C or C++). TiMidity++ does some lyrics display, but I've yet to see it display lyrics created by abc2midi using the console version of TiMidity++. Some educators have found Karaoke to be a good way to help students improve their reading skills.

abc2midi - create your own music using music notation and convert to midi format (command line)
abcm2ps - creates sheet music (command line)
sox - sound exchange, audio file converter and player (command line)
milkytracker - create and play music
TiMidity++ - plays midi files


Readers

Still need several suggestions in this area. I'm currently looking for lightweight PDF and Postscript viewers. Was thinking of using mupdf but I'd still need a decent front-end for it that will work in framebuffer mode. Xpost might make an interesting alternative for Postscript display, but it's still in the works. I found a cbr/cbz library, but don't have a good framebuffer based front end for that yet either. It could be integrated with mupdf or used standalone. Would be nice to include some educational public domain ebooks with the distribution too.

bard - epub reader with text-to-speech capability
pdftxt - converts PDF to text using libmupdf (Can be used with search tools such as grep.)
qpdf - command line PDF transformation tool
sdlbook - SDL front end for libmupdf (Recently found this and it may fill my needs for a PDF viewer.)


Audio/video players

flxplay - plays flx movies
theoraplay - plays ogg theora videos and ogg vorbis


Astronomy

nightsky - displays stars
pngphoon - graphically shows moon phase (command line)
lcal - command line based lunar calendar that outputs to PostScript


Word processing

I'm thinking of using one or more of the following editors as an alternative to the popular vi/vim and emacs editors. Other suggestions welcome.

nano - ncurses/pdcurses editor
textadept - programming editor that uses scintilla editor widget has ncurses/pdcurses front-end
wordgrinder - ncurses word processor
mp (maximum profit) - editor with ncurses/pdcurses front-end


Other text related utilities

I have a few dictionaries in stardict format that are Open Source. (Created one from the Mobi project.) I'm looking for other Open Source dictionaries in the stardict format or easily converted to that format. Also still looking for a good grammar checker program.

hunspell - command line spell checker
sdcv - command line version of stardict dictionary tool
style - readability tool
diction - readability tool


Information managers/organizational tools

This section needs some additions. Anyone know a good SDL based calculator? I'd love to find a decent command line utility to avoid repetitive stress injury. There are some great desktop ones such as (workrave and prevrsi).

pcal - command line calendar that outputs to PostScript
ckpass - possible command line keepass replacement
sc - spreadsheet calculator


Hobby related

Don't have much in this category yet. There are several good HAM radio programs available. Maybe some of them that will work in console or command line mode could be added. Other hobby suggestions welcome. Also, maybe some public domain ebooks on hobbies could be useful.

nut - nutritional analysis


Educational entertainment

If you have other recommendations, please let me know.

lpairs - memory game
dual-n-back - memory tool
anagramarama - anagram language game
scramble - anagram language game
hangman - language game
concentration - memory game
tuxmath - game for improving math skills
starlanes - interstellar commerce game


That's all I have so far. I still have to look into remastering a Linux distribution. If you have tips for a simple remastering tool to use or know of some good documentation on how to remaster a Linux distribution via command line, please let me know. Would also appreciate other suggestions for lightweight, portable, useful or educational software (preferably in C). I'm also looking for Creative Commons, public domain or Open licensed educational media (ebooks, videos, etc.). Know of a Linux distribution that's already doing a similar project and would like another volunteer? Please let me know. If you'd like to discuss this project further or help out in some way, feel free to contact me ( http://www.distasis.com/connect.htm ). Thanks.
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.

June 2025

S M T W T F S
1234567
8 91011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 5th, 2025 01:46 am
Powered by Dreamwidth Studios