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/MoSync
Developers 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/Android
Information on using libSDL 2.x with Android.
https://github.com/georgp24/microwindows-android-bin
Port 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_Android
Article 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/FastCGI
If 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/kcgi
This looks like an alternative to FastCGI.
https://github.com/emweb/wt
Wt 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/cgic
cgic 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.html
cgicc is a GNU C++ class library for writing CGI applications.
https://eekim.com/software/cgihtml/index.html
CGI 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.html
C++ macro preprocessor for development of CGI programs.
http://ocicpplib.sourceforge.net/cgi_utils.shtml
CGI 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/sepia
SCGI REST lib in C.
http://www.rlgsc.com/openvms-bootcamp/2011/web-server-scripting-in-c.html
Talk 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=1
Tinygl.js which gives an OpenGL subset
https://medium.com/@robaboukhalil/porting-games-to-the-web-with-webassembly-70d598e1a3ec
Porting 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/TeaJS
Another 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 ).
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/MoSync
Developers 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/Android
Information on using libSDL 2.x with Android.
https://github.com/georgp24/microwindows-android-bin
Port 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_Android
Article 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/FastCGI
If 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/kcgi
This looks like an alternative to FastCGI.
https://github.com/emweb/wt
Wt 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/cgic
cgic 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.html
cgicc is a GNU C++ class library for writing CGI applications.
https://eekim.com/software/cgihtml/index.html
CGI 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.html
C++ macro preprocessor for development of CGI programs.
http://ocicpplib.sourceforge.net/cgi_utils.shtml
CGI 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/sepia
SCGI REST lib in C.
http://www.rlgsc.com/openvms-bootcamp/2011/web-server-scripting-in-c.html
Talk 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=1
Tinygl.js which gives an OpenGL subset
https://medium.com/@robaboukhalil/porting-games-to-the-web-with-webassembly-70d598e1a3ec
Porting 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/TeaJS
Another 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 ).