Linux Programming/Cross Platform
The focus of this wiki page is cross-platform  program development, using Linux and Open Source  software mostly, in a top down approach. The intention is to introduce object oriented programming (OOP)  using rapid application deployment (RAD)  graphical user interfaced (GUI)  integrated development environments (IDE's) . The target audience is those new to programming or those who wish to become cross-platform developers. It is not intended for the programming gurus, although their input in assisting with documentation for beginners and intermediate programmers would be greatly appreciated.
A major stumbling block in the adoption of Open Source software is the lack of application software that runs on Linux. Most software available runs on the Win32 platform. This web page attempts to introduce you to software development environments that enable software to be run on almost any operating system platform. The ideal is to code once and compile for various platforms. This strategy of software development is commonly called cross-platform development. A book has been written, check it out at http://cross-platform.net.
What are the requirements for a cross-platform development environment ?
- The cross-platform environment should enable rapid application deployment (RAD) with a fairly easy to use and intuitive graphical user interface (GUI).
- The integrated development environment (IDE) software should be available to run on Win32, Mac OS X and Linux/Posix  platforms.
- Of course the means to run the compiled  programs must be available for all platforms.
- Fairly extensive documentation, with examples, should be available.
- A good debugger  (preferably a visual one).
- An extensive application development platform, in the form of a library or framework, providing infrastructure such as file and directory manipulation, socket streams, persistence, threads and configuration. This is also typically where all the platform-specifics are abstracted away.
Available Cross-Platform Development Environments
- Mono/.NET (Runs most Microsoft .NET apps)
- Eclipse (Up and coming universal IDE released as open source by IBM)
- Python (Interperter that runs on Win32 and Posix)
- Java (Runs apps thru JVM, but is slow and propietary)
- LAMP (This web site is LAMP, enough said)
- FreeGee (Most promising so far)
Windows Widget Toolkits
Most GUI windowing environment  programs for Linux are written using Widget  Toolkits . Deciding which Widget Toolkit to use in the development of your cross-platform program is another important factor. The most popular windowing systems at the moment are:
- Microsoft 
- KDE  which uses the QT  Toolkit.
- GNOME  which uses the GTK  (Gimp Tool Kit) and wxWidgets  Toolkit.
The most popular IDE's to use for each Widget Toolkit are:
- For QT there is QtDesigner ('designer') and KDevelop .
- For GTK there is GLADE .
- For wxWidgets there are wxGlade(free) , wxWorkshop(free) , wxDesigner(commercial) , and C++BuilderX(commercial) .
Therefore your cross-platform IDE should be able to use both the QT, GTK and wxWindows widget toolkits or be able to convert. There was an issue about the license for the QT library, but it seems that QT  is now licensed under the GPL . However it would be prudent to use the GTK widgets for programming, since GTK is fully GPL'ed.
A process has started to formalise desktop standards, see: http://www.freedesktop.org/wiki/Standards
In addition it is important to make the human interface to your windows (GUI) program efficient. Read more about the subject of the user interface in software design here .
Programming Languages and Tools
Some others are:
Some efforts to standardise programming on Linux have been made with the Linux Standards Base .
Version Control and Software Bug Tracking
Normally the initial release of software is called "alpha" then "beta'. In addition software releases are tagged as "stable" or "unstable/development" releases. The stable releases are normally given even number suffixes and unstable odd number suffixes.
- Version 1.0 = stable
- Version 1.1 = unstable
- Version 2.0 = stable (newbranch indicating major changes)
- Version 2.1 = unstable
- Version 2.2 = stable
Once the program is written and packaged, user feedback in the form of bug reports is usually normal. This form of feedback is one of the strong points of community development of software. The maxim is: Release early, keep it small and update often. A good source for a bug tracking system is Bugzilla .
Once the program has been written and stored with a version control system, the next step is to package it so that it can be easily installed. The ideal is to have a similar install process as Microsoft Windows where the user simply clicks on "install.exe" or "setup.exe" and the program/software installs.
Some pioneers in the Open Source community to whom we pay tribute. (In no particular order).
- Richard M Stallman 
- Eric S Raymond 
- Eben Moglen 
- Linus Torvalds 
- Bruce Perens 
- Nat Friedman 
- Matthias Ettrich 
- Miguel de Icaza 
Watch the video about the Open Source revolution