You are here: Cross Platform library in C++ for Windows, WM, WinCE, MacOS, iPhone

Cross Platform library in C++ for Windows, WM, WinCE, MacOS, iPhone

Is there a portable (Cross Platform) library in C++ for Windows, WM, WinCE, MacOS, iPhone?
I wand to port a windows screensaver written in MS Visual Studio 2005, C++.
I need the library to contain:
- animated sprites, with transparency, z-order
- bitmap stretching
- have something to avoid flickering when drawing on screen

For the settings dialogs of the screensaver it must have controls like:
- buttons,
- edit boxes,
- image place holders,
- tick boxes,
- panels,
- etc.

For the file I/O it must have:
- file read/write, getSize, fileExists functions.
- INI file class
- Text file Event Logging file class

I have been looking at the internet for cross platform libraries and have summarized below some available libraries.
It seems the most promising of them are:
QT by QtSoftware,
wxWidgets

If you have experience n cross platform programming, please give your advice.



wxWidgets
http://www.wxwidgets.org/
Create applications for Win32, Mac OS X, GTK+, X11, Motif, WinCE, and more using one codebase.

License:
L-GPL

Review:
Google PR: 6
Last announcement/update: 2009-04-28
Comparison of wxWidgets with other cross platform tools
http://wiki.wxwidgets.org/WxWidgets_Compared_To_Other_Toolkits#FLTK



Lazarus
http://www.lazarus.freepascal.org/
Windows, Linux, Mac OS

Review:
Google PR: 6
Last announcement/update: 2009-03-23



SDL - Simple DirectMedia Layer
http://www.libsdl.org/
SDL is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is used by MPEG playback software, emulators, and many popular games.

Platforms:
Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX.
The code contains support for AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS, and OS/2, but these are not officially supported.

License:
GNU LGPL version 2. This license allows you to use SDL freely in commercial programs as long as you link with the dynamic library.

Review:
Google PR: 7
Last announcement/update: 2009-04-26



Allegro
http://alleg.sourceforge.net/
http://www.allegro.cc/
Allegro is a game programming library for C/C++ developers distributed freely, supporting the following platforms: DOS, Unix (Linux, FreeBSD, Irix, Solaris, Darwin), Windows, QNX, BeOS and MacOS X. It provides many functions for graphics, sounds, player input (keyboard, mouse and joystick) and timers. It also provides fixed and floating point mathematical functions, 3d functions, file management functions, compressed datafile and a GUI.

License:
gift-ware (free to use in any way)

Review:
Google PR: 5
Last announcement/update: 2009-03-25
Comments: It seems to me that SDL has larger installed base and I would prefer SDL instead of Allegro



Troll 2D
http://code.google.com/p/troll2d/
Troll is an easy-to-use 2D game engine. It supports several back-ends, such as SDL and Allegro. Compatible with any OS, such as Windows, Mac OS X, Linux and Unix. Embedded systems, like Symbian OS, Windows Mobile and the iPhone, are also supported.
* Surface transformations (rotate, scale)
* PNG support
* Frame timing control (with low CPU usage)
* Many primitives (Lines, Rect, Circle, Arc, RoundedRect)
* Alpha support

Review:
Google PR: 4
Last announcement/update: 2008-10-01
Comments: Troll has no updates for some months. Is based on SDL and Allegro, so I would go for either of those two, instead of Troll.



Qt – A cross-platform application and UI framework
http://www.qtsoftware.com
Develop applications and user interfaces once, and deploy them across Windows, Mac, Linux/X11, embedded Linux, Windows CE and S60 (coming soon) without rewriting the source code.
Qt SDK, libraries and Qt Creator IDE available under LGPL and GPL licenses.

Review:
Google PR: 6
Last announcement/update: 2009-04-23



OpenGL
Platforms: Windows, Linux and MacOS X, and mobile edtion.

Comments: I wouldn't go for OpenGL because not all graphics card support it. For example, cheap netbooks do not support it.



DirectX
Comments: I wouldn't go for DirectX because it is only for Microsoft systems.

ClanLib is a cross platform C++ toolkit library.

# Windows, Linux and Mac OS X
# Basic cross platform runtime (threading, file I/O, etc.)
# Template based C++ signal library (type-safe callbacks)
# Integrated resource management
# Sound mixer supporting wav, tracker formats (mod/s3m/xm/..) and ogg-vorbis
# XML/DOM support
# High level 2D graphics API supporting OpenGL and SDL as render targets
# Batch rendering engine maximizing performance when rendering 2D with OpenGL
# 2D collision detection
# 2D sprite animation support
# Highly customizable GUI framework
# Network library with low level and high level interfaces
# Cross platform OpenGL 2.0 wrapper

External Libraries Used by ClanLib
* zlib, required by clanCore
* libjpeg, required by clanDisplay
* libpng, required by clanDisplay
* MikMod, required by clanMikMod
* libOgg, required by clanVorbis
* libVorbis, required by clanVorbis
* FreeType, required by clanDisplay
* pcre, required by clanRegExp
* SDL, required by clanSDL

You can also download precompiled versions for Win32 of these external libraries.

Platforms:
Windows, Linux

http://www.clanlib.org/

OpenSceneGraph

The OpenSceneGraph is an open source high performance 3D graphics toolkit, used by application developers in fields such as visual simulation, games, virtual reality, scientific visualization and modelling. Written entirely in Standard C++ and OpenGL it runs on all Windows platforms, OSX, GNU/Linux, IRIX, Solaris, HP-Ux, AIX and FreeBSD operating systems. The OpenSceneGraph is now well established as the world leading scene graph technology, used widely in the vis-sim, space, scientific, oil-gas, games and virtual reality industries.

License:
The OpenSceneGraph Public License is designed to be compatible with use of proprietary applications, such applications can statically and dynamically link to the OpenSceneGraph and can be redistributed with the libraries free of charge. Your applications can be distributed under any license, be it open source or proprietary.

Platforms:
IRIX, Linux, Windows, FreeBSD, Mac OSX, Solaris, HP-UX, AIX.

The core scene graph has been designed to have minimal dependency on any specific platform, requiring little more than Standard C++ and OpenGL. This has allowed the scene graph to be rapidly ported to a wide range of platforms - originally developed on IRIX, then ported to Linux, then to Windows, then FreeBSD, Mac OSX, Solaris, HP-UX, AIX.

The core scene graph library is completely windowing system independent, which makes it easy for users to add their own window-specific libraries and applications on top. In the OpenSceneGraph distribution the osgViewer library provides native windowing support under Windows (Win32), Unices (X11) and OSX (Carbon). The osgViewer library can also be easily integrated with other windowing toolkits, such as Qt, GLUT, FLTK, SDL, WxWidget?, Cocoa and MFC.

http://www.openscenegraph.org/projects/osg/wiki/About/Introduction

OGRE (O-O Graphics Rendering Engine)

An efficient, object-oriented hardware accelerated 3D engine. It abstracts the differences between APIs and platforms and allows scene-oriented coding through an easy to use object model. Adaptable to multiple scene types (indoor, outdoor, whatever).

* Direct3D and OpenGL support
* Builds on Visual C++ and Code::Blocks on Windows
* Builds on gcc 3+ on Linux / Mac OSX (using XCode)

Scene Features

* Highly customisable, flexible scene management, not tied to any single scene type. Use predefined classes for scene organisation if they suit or plug in your own subclass to gain full control over the scene organisation
* Several example plugins demonstrate various ways of handling the scene specific to a particular type of layout (e.g. BSP, Octree)
* Hierarchical scene graph; nodes allow objects to be attached to each other and follow each others movements, articulated structures etc
* Multiple shadow rendering techniques, both modulative and additive techniques, stencil and texture based, each highly configurable and taking full advantage of any hardware acceleration available.
* Scene querying features

Platforms:
Windows (all major versions)
Linux
Mac OSX

Comments:
OGRE is "just" a rendering engine to provide a general solution for graphics rendering. Other provided facilities (vector and matrix classes, memory handling, etc.), are considered supplemental. It is not an all-in-one solution in terms of game development or simulation as it doesn't provide audio or physics support, for instance.

http://www.ogre3d.org/about/features

G3D Innovation Engine [good]

The G3D Innovation Engine is a commercial-grade C++ 3D engine available as Open Source (BSD License). It is used in commercial games, research papers, military simulators, and university courses. G3D supports hardware accelerated real-time rendering, off-line rendering like ray tracing, and general purpose computation on GPUs.

Major features include:

* 3DS, IFS, MD2, BSP, PLY2, OFF, and custom models
* JPG, PNG, BMP, PPM, PCX, TGA, DDS, and ICO images
* MP4, MPG, MOV, AVI, DV, QT, WMV, video
* Runtime debugging tools and developer HUD
* Themed GUI and font rendering
* Optional automatic memory management
* TCP and UDP-based networking with P2P LAN discovery
* Optimized n x m matrix, including inverse and SVD
* Windows XP, Vista, OS X, Linux, and FreeBSD supported
* Visual C++, XCode, and gcc compatible
* Configuration file read/write
* Spline, kd-tree, Frustum and other necessary 3D classes
* Java interoperability for file and network classes
* Tools: Model viewer, GPU benchmark, and build utilities

APIs by task:
* Debugging
* Profiling and Optimization
* 2D Graphical User Interface
* Scene Graph
* Shadows
* Images and Video
* Strings
* File I/O
* Ray Tracing and Physics
* Network

Platforms:
Windows, Linux, MacOS

License:
This library is free code-- you can use it without charge and it is minimally legally encumbered. No need to release your source code or make your own program open source.

http://g3d-cpp.sourceforge.net/

Irrlicht Engine [good]

The Irrlicht Engine is a cross-platform high performance realtime 3D engine written in C++. It is a powerful high level API for creating complete 3D and 2D applications like games or scientific visualizations.

Special effects
* Realistic water surfaces
* Dynamic lights
* Dynamic shadows using the stencil buffer
* Billboards
* Bump mapping
* Parallax mapping
* Transparent objects
* Light maps
* Customizeable Particle systems for snow, smoke, fire, ...
* Sphere mapping
* Texture animation
* Skyboxes and skydomes
* Fog

Namespace List:
irr
irr::core (In this namespace can be found basic classes like vectors, planes, arrays, lists and so on)
irr::gui (The gui namespace contains useful classes for easy creation of a graphical user interface)
irr::io
irr::scene
irr::scene::quake3
irr::video

Platforms:
* Windows, WinCE
* Linux
* OSX
* Sun Solaris/SPARC
* All platforms using SDL

Direct3D will not be present on a Mac or a Linux Workstation, while maybe OpenGL will. And when OpenGL is not available either, there are still the Irrlicht Engine software renderers, which will always operate on any platform.

Irrlicht's internal event system provides mouse, keyboard, joystick and GUI events without having to rely on additional libraries.

Filesystem access is abstracted allowing platform-independent file and folder access, and transparent access to files within Zip archives. Other IO features include an XML reader and writer, the ability to take screenshots, manipulate images and meshes and then save them in several different file formats.

Irrlicht's provides support for simple collision detection including mouse picking.

http://irrlicht.sourceforge.net/features.html#platforms



Short example
A simple application, starting up the engine, loading a Quake 2 animated model file and the corresponding texture, animating and displaying it in front of a blue background and placing a user controlable 3d camera would look like the following code. I think this example shows the usage of the engine quite well:

#include
using namespace irr;

int main()
{
// start up the engine
IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D8,
core::dimension2d(640,480));

video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* scenemgr = device->getSceneManager();

device->setWindowCaption(L"Hello World!");

// load and show quake2 .md2 model
scene::ISceneNode* node = scenemgr->addAnimatedMeshSceneNode(
scenemgr->getMesh("quake2model.md2"));

// if everything worked, add a texture and disable lighting
if (node)
{
node->setMaterialTexture(0, driver->getTexture("texture.bmp"));
node->setMaterialFlag(video::EMF_LIGHTING, false);
}

// add a first person shooter style user controlled camera
scenemgr->addCameraSceneNodeFPS();

// draw everything
while(device->run() && driver)
{
driver->beginScene(true, true, video::SColor(255,0,0,255));
scenemgr->drawAll();
driver->endScene();
}

// delete device
device->drop();
return 0;
}

statically linked

Q:
Can it be statically linked with the application in a single EXE? It depends on SDL which cannot be build statically; SDL's license requires to distribute DLLs.

Visualization Library

Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the industry standard OpenGL 2.1

# Code developed in standard C++/STL, inspired by Boost and Design Patterns.
# Friendly API using OpenGL wording and conventions.
# Minimalistic, efficient, professional, reliable.
# Debug-friendly behaviour.
# Designed to be a sensible, high-performance, thin layer on top of OpenGL

Namespaces:
Here is a list of all namespaces with brief descriptions:
vl - Visualization Library namespace
vlGLUT - The GLUT bindings namespace
vlMFC - The MFC bindings namespace
vlMolecule - The Molecule Visualization namespace
vlQt4 - The Qt4 bindings namespace
vlSDL - The SDL bindings namespace
vlut - Visualization Library utility namespace
vlVG - The Vector Graphics namespace
vlVolume - The Volume Rendering namespace
vlWin32 - The Win32 bindings namespace
vlWX - The wxWidgets bindings namespace

Platforms:
Windows, Linux, Mac OS X (32 and 64 bits)

License: a dual licensing model:
* For proprietary and commercial products you must to obtain a Professional Edition License (VPL).
* For open source applications: by default Visualization Library is distributed under the GNU General Public License Version 3.

Homepage:
http://www.visualizationlibrary.com/jetcms/

Review comments:
Does it run on computers without OpenGL?
It is a new software: Beta 2 version released on 2009.07.

Gosu

Gosu is a 2D game development library for the Ruby and C++ programming languages.

Platforms:
Mac OS X, Windows, Linux.

License:
MIT license

Example of code:
http://www.oreillynet.com/pub/a/ruby/2007/12/04/creating-games-in-ruby.h...

Gosu website:
http://www.libgosu.org/

POCO C++ Libraries

The POCO C++ Libraries (POCO stands for POrtable COmponents) are open source C++ class libraries that simplify and accelerate the development of network-centric, portable applications in C++.

Features:
* threads, thread synchronization and advanced abstractions for multithreaded programming
* streams and filesystem access
* shared libraries and class loading
* powerful logging and error reporting
* security and encryption
* network programming (TCP/IP sockets, HTTP client and HTTP server, FTP, SMTP, POP3, etc.)
* XML parsing (SAX2 and DOM) and generation
* configuration file and options handling
* SQL database access (ODBC, MySQL, SQLite)

Platforms:
* Windows
* Mac OS X
* iPhone OS
* (embedded) Linux
* HP-UX
* Tru64
* Solaris
* QNX

License:
Boost Software License, which makes it free — no strings attached — for both open source and commercial use.

Homepage:
http://pocoproject.org/wiki/index.php/Tutorials

Review comments:
This library does not provide portable graphics routines as requested in this page, but it seems to be a very nice portable library for the additional operations of a portable application.

Orx - Portable Game Engine

Orx is an open source, portable, lightweight, plugin-based, data-driven and extremely easy to use 2D-oriented game engine.
Orx is a full featured and powerful "2.5D" game engine. All objects and cameras are created in a 3D space, but only a 2D rendering plugin is currently available. Adding 3D rendering will probably come after its v1.0 release as it's not part of the current focus.

Platforms:
windows (mingw and native using visual studio),
linux (x86)
MacOS X (ppc/x86)
iPhone, OpenPandora and PSP versions are already planned.

License:
LGPL meaning that you can use it (and modify it) for free for any kind of projects, freeware or commercial.

Homepage:
https://sourceforge.net/projects/orx/

Review Comments:
Release canditate 1 available (no final version available). Therefore the library is not mature.

There has been some

There has been some changes:
- the iPhone version has been released as a beta and the stable release is coming soon.
- orx is now licensed under the zlib license for more flexibility.
- version 1.2 has been announced and should be released before end of summer.

Update

There has been some changes:
- the iPhone version has been released as a beta and the stable release is coming soon.
- orx is now licensed under the zlib license for more flexibility.
- version 1.2 has been announced and should be released before end of summer.

GamePower 3D (GP3D) and GamePower 2D (GP2D)

GamePower 3D (GP3D) and GamePower 2D (GP2D) are a portable OpenGL/SDL wrapper using C/C++ designed specifically for professional game making in various platforms such as Windows, Linux and Macintosh by exploiting the portable capabilities of OpenGL and SDL.

19th February 2007 GP3D 0.0.3 released

License:
GPL license

http://gamepower.sourceforge.net/en/index.php

C++ String Toolkit (StrTk) Library

The C++ String Toolkit (StrTk) Library is a free library that consists of robust, optimized and portable generic string processing algorithms and procedures for the C++ language. The library is designed to be easy to use and integrate within existing code.

Features:
* Generic string tokenizer and token iterators
* Split routines
* User specified delimiter and splitter policies (simple and regex based etc.)
* Conversions between data and hex and base-64
* In-place removal and replace routines
* Wild-card matching and globing
* Fast 2D token grid processing
* Extensible string processing templates

https://www.ohloh.net/p/strtk

Fog

Fog is crossplaform library for C++ language that is designed as a complete solution to build crossplatform applications. It's single library that contains multiple parts with minimum dependencies to other libraries.

Fog contains three indenpendent parts:
* Core - Plafrorm abstraction library.
* Graphics - 2D graphics library.
* UI - Windowing system and UI components.

List of most interesting 'Fog/Core' features:

* Algorithms - Classes related to containers (Vector, List, Hash, BitArray).
* Event loop - Classes related to event loops (EventLoop, Task, Timer, ...).
* Filesystem - Contains classes to work with streams, directory structure, file testing and more...
* Library - Shared libraries management.
* Object architecture - Architecture that supports own RTTI and event connections.
* Strings - Powerful and very optimized 8-bit, 16-bit and 32-bit string classes and text codecs used everywhere in library.
* Threading - Allows to create threads, synchronization primitives and thread local storag with destructors.
* Tools - All other stuff not categorized.

List of most interesting 'Fog/Graphics' features:

* Converter - Convert pixels from one format to another.
* Dithering - Convert your image to 8 bit or less using dithering technique.
* Fonts management - Classes related to fonts and font cache.
* Geometry - Geometric primitives (Point, Rect, ...)
* Image - Image container.
* ImageIO - Image input / output based on modules.
* Painter - Raster and vector based painter.
* Region - Raster based region container that is created through Y-sorted rectangles.

Fog library is not yet complete or recommended for use. Everything is in development and time is needed to improve and stabilize the library.

License:
MIT License

http://code.google.com/p/fog/

SFML - Simple and Fast Multimedia Library [good]

SFML is a portable and easy to use multimedia API written in C++. You can see it as a modern, object-oriented alternative to SDL.
SFML is composed of several packages to perfectly suit your needs. You can use SFML as a minimal windowing system to interface with OpenGL, or as a fully-featured multimedia library for building games or interactive programs.

Platforms:
Windows (98, 2000, XP, Vista)
Linux
Mac OS X

License:
SFML is completely free for any use, commercial or not, open-source or not.

Homepage:
http://www.sfml-dev.org/features.php

Code example:
http://www.sfml-dev.org/documentation/1.5/

pxCore - Portable framebuffer library & related projects [good]

pxCore is a small opensource library that provides a portable framebuffer and windowing abstraction for C++. This library is intended to hide the complexity of writing rasterization code on multiple platforms and allows you to easily write the following sorts of things in a portable way.

* 2d and 3d rasterizers
* Transition Libraries
* Filter Routines
* Image Processing

Platforms:
- Windows
- Pocketpc (arm4)
- linux(x11)
- OSX

License:
Free to use.

Homepage:
http://code.google.com/p/pxcore/

Code example:

int pxMain()
{
    myWindow win;

    win.init(10, 64, 640, 480);
    win.setTitle("Sprite");
    win.setVisibility(true);

    eventLoop.run();

    return 0;
}

Netscape Portable Runtime (NSPR)

Use a platform abstraction library like NSPR.

XUL is a good cross platform technology

See also:
http://en.wikipedia.org/wiki/List_of_C%2B%2B_template_libraries

Additional Tools for development with wxWidgets

VisualWx (v0.87.6.0 Alfa April 13 2007)
Visualwx aims to be the ultimate RAD tool, designed for c++, python, perl, ruby lua and wxWidgets. The program already has a lot of features:
· Designer of various frame (form) and sizers
· Visualwx generates code for c++, python, perl,ruby,lua
· Compiler is supported (Mingw32)
· Editor for c++,python,perl,ruby,lua (scintilla editor)
http://visualwx.altervista.org/



wxWorkshop (Version:0.7, Date:2002-02-13)
wxWorkshop is a cross-platform IDE and RAD tool designed to aid and accelerate development of wxWidgets based applications.

wxWorkshop removes the need to manually hand code dialogs. By providing a WYSIWYG interface, and generating compilable source code for you based on the visually designed interface, early GUI development times are back to being a minor fraction of the development cycle.

wxWorkshop combines many of the tools needed by developers for writing applications: dialog generator, source code generator, source code editor, and more. With wxWorkshop, you can even invoke your command-line compiler from within the IDE to compile your program.
http://wxworkshop.sourceforge.net/



wxDesigner Version: 2.19, Date: April 28th, 2009
Dialog editor and RAD tool for wxWidgets.
wxDesigner is a visual development tool for the free cross-platform GUI library wxWidgets - supporting C++, Python, Perl and XML output.
Available for Windows, Linux, MacOS X.
Single-user licence: EURO 129, Student License: Euro 29
http://www.wxdesigner-software.de/

TwinForms

TwinForms provides solutions to developers to create cross platform applications using CodeGear Delphi and CodeGear C++ Builder.

wxVCL for C++ is a cross platform library that mimics Delphi's VCL functions.
http://www.twinforms.com/products/wxwidgets/wxvcl.php
wxVCL for C++ is a library for wxWidgets that contains functions that mimics VCL for Delphi and C++ Builder. Currently it has some basic VCL classes and approx. 600 VCL functions (functions in SysUtils, DateUtils, System, StrUtils etc.) Unlike VCL, wxVCL can be used in various OS that are supported by wxWidgets.

portable INI file class

I have tested:

- minIni
I was not able to compile it under wince

- simpleIni
Compiles just fine on Windows and WinCE

- Boost has also a configuration class but I found it rather complex.

- wxWidgets have a ini settings class but on winCE it uses the registry instead of a plain INI file. I hate saving to registry and I do prefer the INI files.

- QT has an almost excellent QSettings class.
I was not able to link it statically with my program.

FPC - free pascal compiler

FPC - free pascal compiler can be used to create windows, winCE, MacOS, iPhone applications.
Here is an update:
http://wiki.freepascal.org/iPhone/iPod_development

Midlet Pascal (Pascal to Java)

Midlet Pascal is to use for developing Java midlets for mobile phones. Compiles Pascal programming language directly into Java bytecode usable on all Java enabled mobile phones. Midlet Pascal is a useful tool for mobile phone developers that lets them to build java games and applications.

Here are some key features of "Midlet Pascal":

· boolean, integer, character, string, array (multidimensional arrays are supported), record and image data types
· most Pascal program flow-control statements: if-then-else statement, do-while loop, repeat-until loop, for loop, procedures and functions
· support for multiple source files and multiple build configurations.
· defining constants and custom data types
· graphics functions to access the mobile device display and to load and display PNG images
· integrated PNG image editor
· functions to access the mobile device keypad
· user-interface (forms) support
· HTTP connectivity
· SMS messaging
· sound functions
· record store support (record store is where you save data on the mobile phone)
· date and time functions, string functions, random number generator functions
· customizable syntax coloring editor
· real (floating-point) numbers and math functions
· compiler directly generates Java bytecode - fast compile and execute!
· support for phone emulators
· example source of Mobile tetris

Shareware version limitations:
Screen displaying that it is unregistered version.

Cross-Platform Abstraction Libraries

Another list of Cross-Platform (portable) Abstraction Libraries
http://www.shlomifish.org/open-source/portability-libs/

WideStudio - Opensource IDE and Library

WideStudio is an open source, Integrated Development Environment for desktop applications purely made in Japan. This enables you to develop GUI applications that can run on Windows95/98/Me/NT/2000/Xp/Vista, WindowsCE, Linux, FreeBSD, SOLARIS, MacOSX(w/X11), BTRON, T-Engine, mu-CLinux(wo/X11) in various programming languages such as C/C++, Java, Perl, Ruby, Python,Objective Caml

All features of WideStudio are aviable free of charge
Applications developed with WideStudio and the libraries may be distributable commercially or non-commercially. i.e. You can sell your applications built with WideStudio.

Last release: 10/Aug/2010 (checked 18/Aug/2010)

http://www.widestudio.org/EE/wsinfo.html

DSDP-NAB project

The Native Application Builder project creates framework to build a C++ and several languages GUI applications. The goal is to allow the user to write a GUI application once and build it for many platforms without changing the code.
http://www.eclipse.org/dsdp/nab/
Last release: 2008 (checked in 2010)