There are some great Open Source applications out there for desktops and laptop machines, but it's much harder to find Open Source for mobile devices. Most mobile devices require their users to go through a proprietary app store just to get software onto their devices. This is a setup back for the Open Source movement since more and more people are turning to mobile devices as their primary computing source.
If you have suggestions and/or recommendations for FLOSS alternatives in the mobile space, please share them with me and other Free, Libre and Open Source advocates on the Schoolforge mailing list (
https://schoolforge.net/ ).
I'll share some Open Source options I've found to date for developing mobile and cloud based applications.
Cross-platform Mobile App Development
Here are a couple of very interesting projects that let developers create cross-platform mobile applications:
https://github.com/MoSyncDevelopers can use C/C++ which can be compiled to run natively on certain platforms or converted to Java bytecode output that can run on phones that only support Java applications. One can also develop HTML/CSS/JavaScript applications for phones that support those formats (similar to Cordova).
https://cordova.apache.org/This project supports HTML/CSS/JavaScript development of applications that will work on a wide variety of mobile platforms.
C/C++ Mobile Development
If you want to port your own C/C++ programs or interesting Open Source C/C++ applications to mobile devices such as Android, these projects may be useful.
https://wiki.libsdl.org/AndroidInformation on using libSDL 2.x with Android.
https://github.com/georgp24/microwindows-android-binPort of Nano-X/MicroWindows to Android. Nano-X/MicroWindows supports a subset of simple X11 and Windows applications. Many FLTK applications port easily when run with Nano-X.
https://wiki.allegro.cc/index.php?title=Running_Allegro_applications_on_AndroidArticle on building and running Allegro based applications on Android.
C/C++ CGI Development
As a C/C++ programmer, I was surprised by how few CGI applications were built with these languages. Originally, I read that the reasoning behind this was that one would have to spawn a new process every time one wanted to run a C/C++ CGI program. Interpreted languages could be built into the web server and avoid spawning new processes. However, with the introduction of libraries such as FastCGI, the inefficiencies of running compiled programs as CGI applications is no longer an issue. From everything I've read, C/C++ CGI programs are much faster than other CGI programs if they avoid the process spawning issue. If you want a highly efficient CGI program, it's a good time to revisit using C/C++ with the proper libraries.
Here's some more information on FastCGI.
https://en.wikipedia.org/wiki/FastCGIIf anyone's interested, I have builds of FastCGI and Apache with fcgid support for Windows/MinGW (including patches to get them working on later versions of Windows).
https://github.com/kristapsdz/kcgiThis looks like an alternative to FastCGI.
https://github.com/emweb/wtWt is one of the few projects I've seen that tries to provide useful CGI functionality and routines for C/C++ programmers.
https://github.com/boutell/cgiccgic is an ANSI C library for CGI programming.
https://sourceforge.net/projects/cgi-c/Memory and speed optimized CGI library written in ANSI C. It does all the normal CGI functions, can be used with FastCGI and can receive file uploads.
https://github.com/codazoda/cgi-lib/ANSI C library for CGI programming.
http://www.newbreedsoftware.com/cgi-util/cgi-util is a library for creating CGI programs.
https://www.gnu.org/software/cgicc/doc/index.htmlcgicc is a GNU C++ class library for writing CGI applications.
https://eekim.com/software/cgihtml/index.htmlCGI and HTML routines written for C.
http://cgilib.sourceforge.net/cgilib is a C++ LGPL library for developing CGI programs and generating XHTML 1.0.
https://sourceforge.net/projects/cawfeecgi/Cawfee is a C++ CGI library.
http://www.asksasha.com/download.htmlC++ macro preprocessor for development of CGI programs.
http://ocicpplib.sourceforge.net/cgi_utils.shtmlCGI utilities library for OCI C++ (Oracle interface) library.
https://kristaps.bsd.lv/kcgi/kcgi is an open source CGI and FastCGI library for C/C++ web applications.
https://www.infodrom.org/projects/cgilib/Lightweight CGI Library provides an easy to use interface to CGI for fast CGI programs written in C or C++.
http://wolkykim.github.io/qdecoder/qDecoder is a simple and powerful CGI library.
https://sourceforge.net/projects/libscgi/scgi library in C.
https://github.com/jhyle/sepiaSCGI REST lib in C.
http://www.rlgsc.com/openvms-bootcamp/2011/web-server-scripting-in-c.htmlTalk on Web Server Scripting in "C".
C/C++ on the Web
http://kripken.github.io/emscripten-site/One can also use projects like emscripten to compile C/C++ code into JavaScript that will run on the web. It's an easy way to port your own C/C++ applications or run popular Open Source applications to the web.
https://webassembly.org/Emscripten is being replaced by a newer standard called webassembly. The musl C runtime library has been ported to work with webassembly. The project is called WASI. So, many SDL based applications become easy to port to the web.
Some C/C++ examples using emscripten and/or webassembly are:
https://github.com/humu2009/tinygl.js?files=1Tinygl.js which gives an OpenGL subset
https://medium.com/@robaboukhalil/porting-games-to-the-web-with-webassembly-70d598e1a3ecPorting an SDL based asteroids game to web assembly
https://00f.net/2019/04/07/compiling-to-webassembly-with-llvm-and-clang/Compiling C to WebAssembly using clang/LLVM and WASI
JavaScript
Another area of web development that surprises me is when I see so many language alternatives to JavaScript. JavaScript is supported (in some fashion) by most browsers. However, other programming languages are not. In order to get other languages to work in a browser, they typically need to be converted back to JavaScript. In a case like emscripten, it can be useful to convert C/C++ to JavaScript for porting purposes. However, many new web projects are choosing other languages besides JavaScript (because developers prefer the language) and then using tools to convert those languages back to JavaScript so they'll work via the Internet. Often the conversions introduce a lot of unnecessary code or provide slower implementations than the original. If I'm porting a project that's already written, it's great to be able to move it over with projects like emscripten. However, if I'm writing something new for the web that requires a programming language, I always use JavaScript. It's more efficient to write something specifically for that language than rely on generated code converted from another language.
It's also nice to be able to write CGI in JavaScript and share the same functions, objects and code between the client (browser) and the server. This is one of the major benefits provided by projects like CommonJS. The CommonJS site used to maintain a very nice list of server side JavaScript implementations. Unfortunately, the CommonJS project appears to no longer be active. It's been replaced by more implementation specific solutions like node.js.
There are alternatives for running server side JavaScript other than node.js if you don't want to be locked into a particular web server.
One option is TeaJS which uses FastCGI and works with a variety of web servers including Apache and Nginx.
https://github.com/ondras/TeaJSAnother option is jsc which is a JavaScript implementation that is a part of Webkit (one of the most commonly used browser libraries).
There are also some interesting TinyJS implementations and forks at various code archives such as github. You'll find more details under my Scripting Languages post (
http://lmemsm.dreamwidth.org/2239.html ).