Seems that many of the vendors with commercial products are looking hard at Java... just a few that I know of include Willows, Visix, Neuron Data, Bristol, and RogueWave. Of course, there are many other big names there already, including Sun, Symantec, Borland, Oracle, and yes, even Microsoft.
I will try to get together a rundown on what each offers for next month. In the meantime, you may want to check out some of the sites. It seems that many people are looking to Java as the language that will allow cross-platform portability at last.
Watch those prices! Many will still be out of date! Check with the vendor!
Notable in this version (3.1)
This posting is intended to shell-out as much information as I can find concerning platform-independent Graphical User Interface (PIGUI) development kits (actually, it's platform-independent APIs targeting various platform-DEPENDENT GUIs, but let's not get too picky). This list is being posted because I've seen a whole mess of requests for GUI portability information and, besides, I need this information as well.
This document is maintained and periodically updated as a service to the net by Ross McKay (rosko@zeta.org.au). Any corrections, updates, or other pertinent information are welcomed at that address. If you are a vendor of a PIGUI package (whether it's represented here or not), I encourage you to amend, annotate, and append to this document (and then, of course, send the revisions back to the author).
As the primary format of this document is now HTML, the best place to get it is on the Word Wide Web at the following place: http://www.zeta.org.au/~rosko/pigui.htm
You can also get the plaintext version from the following HTML page: http://www.zeta.org.au/~rosko/textfaq.htm, by anonymous FTP from `rtfm.mit.edu', or by following newsgroups comp.answers or news.answers.
A PIGUI (Platform Independent Graphical User Interface) toolkit is a software library that a programmer uses to produce GUI code for multiple computer systems. The toolkit presents functions and/or objects (along with a programming approach) which is independent of which GUI the programmer is targeting. For the purposes of this document, a PIGUI must support several GUIs under at least two different operating systems (so just supporting OpenLook and Motif on two Unix boxes doesn't count). The toolkit does not necessarily provide any additional portability features. Native look-and-feel is a desirable feature, but is not essential for PIGUIs.
Now, let's consider Petula Sniggly, a programmer who decides she wants to build the ultimate computer program. This thing is going to be so cool that everyone anywhere near a CPU will want to use it, so Petula targets her program for every type of computer on the planet. She considers getting herself a PIGUI toolkit to handle the GUI portion of her code. With a PIGUI toolkit, when she wants to put a menu on the screen, she calls the toolkit's `PIGUI_menu' function. When she compiles her code with the `Macintosh' flag set, the PIGUI library puts a Mac menu on the screen in response to the PIGUI_menu call. When she compiles her code with the `Motif' flag set, the call causes the library to put-up a Motif-style menu. All this happens (theoretically) without Petula having to change her source code. If she is careful to make her non-GUI code portable, she would have a single program (with a single source) that works on multiple platforms.
There is no free lunch, so our heroine Petula has a few things to consider before deciding whether to use a PIGUI. First, most (and maybe `all' depending on whom you believe) of the PIGUIs will slow the execution of your code. You are also limited to the feature set provided by the PIGUI unless you want to code around the toolkit (but, then again, why would you buy the PIGUI in the first place if you're going to code around it?). Bugs in any toolset (PIGUI or otherwise) filter down to your production code. Fewer people know how to code any specific PIGUI than do a platform-specific GUI (e.g., MS-Windows), so wizardly help will be limited. The PIGUI only deals with the GUI aspects of your program -- you're on your own for other portability issues. Finally, if the vendor goes out of business you may be out-of-luck for support of future OS enhancements (source code can ease, but not eliminate, the pain of a vendor closing its doors).
Another approach that Petula could choose, is to design her system partitioned into GUI and non-GUI objects, and implement the GUI objects in the native API. Then, when porting, only the GUI objects need to be rewritten for the new platform. There are some developers who recommend this course of action, as it produces a better fit on each platform and eliminates the overheads often associated with PIGUI toolkits. Obviously, this would mean more effort on Petula's part, in both the initial development and in ongoing maintenance (no single base of source code). It also means learning how to code for every target platform. Not (usually) a trivial task, hence the market for PIGUI kits.
(NB: partitioning your design into GUI and non-GUI objects is a good thing to do anyway)
There are PIGUI kits for languages including C, C++, Smalltalk, Java, Ada, Tcl, and Python. Most (all?) new PIGUI kits will be developed in Object-Oriented programming languages, as GUI work is ideally suited by the advantages of OO (especially inheritance / reuse). The bulk of exising kits are in C++, due to the popularity of that language, with many still in C but supporting C++. I have partitioned the Vendor Reports into separate parts because of this, putting C and C++ kits into Parts 2 and 3, and others in Part 4. My justifications are that:
Many C programmers will look at the purchase of a PIGUI library as a great opportunity to migrate to C++. If the library takes full advantage of C++, the programmer will have to use C++ methodologies (not just a C++ compiler with C syntax) to use it. When one ports a C program to such a library, one should expect to invest a significant amount of effort learning about (and modifying one's code to take advantage of) classes, inheritance, and constructors in order to complete the port. Of course, if one wants one's C code to become C++ code, this is a necessary exercise anyway.
After the introductory stuff, you'll find some more detailed information about PIGUIs in general followed by tables and prose that describe specific PIGUI toolkits.
The limits placed on which products are discussed in this posting are pretty-much provided in the title. The products listed here must be platform-independent and support at least two different OSs. The product must be shipping to the general public (i.e., no beta-only or pre-beta PIGUIs). Moreover, these packages focus on GUI portability, though some provide a larger breadth of portability features (and, I've tried to list those, where applicable). No limits (at either the high or the low end) have been placed on price, even though the prices in the field vary by more than an order of magnitude (and, now, there are some free PIGUI kits).
Note that in addition to one of the products listed here, you'll need (natch) one of the supported host machines, a compiler or interpreter of the appropriate type, and, for layered GUI packages (q.v.), the basic GUI builder for that platform.
The difference in GUI programming is most likely the greatest hurdle when programming for cross-platform portability, but it is not the only hurdle. Other issues often not delt with by cross-platform GUI kits, and not addressed by this FAQ, include (but may not be limited to):
When developing an application that may be ported to more than one platform (even if those platforms are the 16 and 32-bit versions of Microsoft Windows), you should be aware of the differences between the target platforms before development commences.
At this point, I find it necessary to say that this FAQ is my personal work and that this FAQ does IN NO WAY indicate, reveal, imply, infer, allude to, display, suggest, symbolize, expose, demonstrate, hint at, or in any way have anything to do with the thoughts, policies, suggestions, reflections, decisions, theories, sentiments, ponderings, rules, dreams, or beliefs of my employer.
I use a lot of names that are trademarks in this FAQ. At no time should the use of a trademarked name be construed as contesting the trademark. Those trademarks belong to their respective trademark holders.
If lots of stuff in this posting looks familiar to you, you're not hallucinating (well, maybe you are, but not regarding this). Much of the format (and some of the words) of this FAQ have been lifted (with permission -- thanks Eric) from Eric Raymond's PC-UNIX FAQ.
Despite the best efforts of the maintainer of this FAQ, some information contained herein may not be accurate. Please verify any information (especially prices) with the respective vendors before finalising any desision. Please also forward any corrections or comments to the FAQ maintainer, rosko@zeta.org.au
Some information contained in this FAQ is based on the opinions of users of the respective products, and does not necessarily reflect the views of the maintainer of this FAQ.
Here are some words that you'll find in this FAQ along with working definitions for them.
Most, if not all, of the products in this FAQ take one of three approaches to providing platform independence. The two most common approaches are the `layered' and the `emulated' user interface but an up-and-coming approach is `API emulated' interface.
Products using a layered interface access native, third party, GUI-building toolkits to provide the look-and-feel compliance for each particular GUI. Layered user interfaces have the advantage that, since they depend on other products which concentrate on a single GUI, they have to provide less software (and, hence, are usually less expensive) than emulated interfaces. Layered interfaces are also more likely to get the native look-and-feel correct on all platforms. Most of the PIGUI products in this FAQ fit in this category.
In an emulated user interface, the PIGUI's resultant code produces low-level calls and all the look-and-feel compliance is handled by the PIGUI software itself (e.g., for OpenWindows support, the software would NOT produce an XView program that must be compiled with the XView toolkit; the software would produce code that interfaces directly with X intrinsics). To provide an emulated user interface, a vendor has to develop a lot of extra code for look-and-feel support. Emulated user interfaces have the advantage that someone on a Motif workstation, for example, can see how the Macintosh-style UI will look (since the look-and-feel is part of the product). Emulated interfaces have the opportunity to provide a faster GUI than does a layered interface; in addition, it does not require you to purchase (or learn how to use) other kits to build GUI software.
A third approach to platform independence is emulating one of the supported target's APIs (usually, the Microsoft Windows API) to target other GUIs. With one of these products, one would program using the emulated API and the code would be (to the extent to which the product provides portability) portable to other GUIs.
The products in this FAQ are pretty similar in their basic functionality; they each provide function calls or classes that allow the user to build windows, buttons (regular as well as radio buttons and check boxes), menus, menu bars, and the like. Areas of contention seem to be things such as:
Of course, each user will have his own requirements; YMMV.
Now, on to the comparisons. To interpret the tables below, bear in mind the following things:
Another note: given that Sun Microsystems has announced its abandonment of OpenLook in favor of COSE, I'm not sure I'd hold my breath for the OpenLook betas in the tables below. It may just not be worth it for some of the vendors to support a product that has limited (at best) application (in fact, at least one vendor has abandoned an existing OpenLook product).
The following products are listed in this FAQ. Abbreviations are given for product names which are too long to go into the tables.
Please check with vendor, as many of these prices may be out of date!
X/ Open- Next-
Vendor ASCII DOS Win(s) Win/NT OS/2 Motif Look Mac PenOS Step
------- -----------------------------------------------------------------------
Alleg - - 995(f) 995(f) 995 995 - - - -
Amulet - - - free - free - free - -
CLIM . . . . . yes yes soon . .
DCLAP . . (k) . . (k) . (k) . .
Eiffel - - . . - . . soon - .
Galaxy - - 9600m 9600m 9600m 9600m 9600m 9600m - .
Garnet - - - - - free - free - .
Graph - - free free - free - soon - -
ILOG - - 6500 10000 10000 10000 - - - -
JAM yes yes yes . . yes yes . . .
Java - - - yes yes yes . yes - .
libWxm - - (h) (h) - yes - - - .
MAINWin - - (h) (h) - 8000n - - - .
Menuet - 499 599 - 599 999 - . yes .
MetaCrd - - 995(l) 995(l) - 995(l)- soon - -
MEWEL 1595 395u (h) (h) 795 yes - - - .
MS-MFC - - yes 399 - - - 1999 - -
NuTCRAC 1995 - - 2995 - (h) - - - -
OberonF - - 400v 400v - - - 400v - -
OI yes yes 5800 6850 6850 9850 9850 4800 . .
OpenUI yes - 3500 soon 4900 7900g - 3500 (w) .
Qt(q) - - - 1470 - 1470d - - - -
ScrMach 495 495 1995 soon - (p) - - - -
StarVie - - 499 995 495 1499 1499 499 - -
SUIT . (k) (k) . . (k) (k) (k) . .
Tcl/Tk free soon free free soon free free free - .
TWIN - - (h) (h) soon (t) . (t) - -
V - - free free soon free - - - -
VisAge - - . . . . . - - -
VisWork . . 2995 . 2995 4995 4995 2995 . .
Wind/U - - (h) (h) - 9950 - - - .
WMMOTIF 1500 - (h) (h) - 1995 - - - .
WNDX . 1000 1000r 1000r 1000r 1000r - 1000r - -
wxWind soon - free free soon free free free - .
XVT - - 1950 6300ab 1950 6300a (c) 1950 . .
YACL - - free free free free - - - -
zApp(i) - - 1495 1995 1995 4995d - soon - .
Zinc(e) 1499e 499e 499(f) 499(f) 499e 1499 - 499ej 499 .
------- -----------------------------------------------------------------------
Vendor ASCII DOS Win(s) Win/NT OS/2 X/ Open- Mac PenOS Next-
Motif Look Step
What we're looking at is two groups of products. The lower-priced group is usually C++, is a more recent introduction to the market, is almost always a layered GUI, and concentrates on PC-based operating systems. Products from the higher-priced group usually offer a more stable platform with both greater breadth and depth than does the previous group. In either case, the cost premium for UNIX support is usually a factor of 3 -- that is, the GUI package for a UNIX platform for any PIGUI product is usually 3 times as expensive as the version for DOS/MS-Windows. Other `personal' operating systems (e.g. OS/2 and the Mac) vary as to whether they follow the UNIX pricing or the PC pricing. These are merely observations, your mileage may vary.
Table 2: FEATURES, OTHER NIFTIES, AND HIDDEN COSTS
Vendor Type(p) LAF(i) Eval(a) Source Royalty Distrib(z) Language Builder(g) ------- ----------------------------------------------------------------------- Alleg layered native (j) free no . C++ yes Amulet layered native - free free free C++ soon CLIM . native (u) . . . Cmn Lisp (u) DCLAP . native free free . . C/C++ . Eiffel emulate native . . . . Eiffel yes Galaxy emulate native (d) (e) no . C/C++ yes Garnet emulate custom free . . . Cmn Lisp yes Graph emulate native free free . . C no ILOG emulate native 30 no no - C++ yes JAM layered native . yes no . C yes Java layered native free (l) . . Java (l) libWxm API emu native 60 4995 . . . . MAINWin API emu native 30 no (w) (w) C/C++ yes Menuet . native . . . . . . MetaCrd emulate native free no no free MetaTalk yes MEWEL API emu native . (r) no no C(s) (t) MS-MFC . native . . . . C++ yes NuTCRAC API emu native . no . yes C/C++ . OberonF emulate native free free no no Oberon yes OI emulate native (x) . no $8,000 C/C++(k) yes OpenUI layered native (q) (e,b) no . C(h) yes Qt emulate native . . no no C++ . ScrMach layered native 30 (e) no . Ada free StarVie layered native 30 6000 no free C++ yes SUIT . native free free . . C . Tcl/Tk . custom free free no . Tcl(c) yes TWIN API emu native free free no no C/C++ . V emulate native free free no no C++ . VisAge layered native . . . . C++,Smal yes VisWork emulate native 30(j) 100000 yes . SmalTalk yes Wind/U API emu native 30(j) (f) no $19,500/yr C/C++ (t) WMMOTIF API emu native (j) 7500 no no C/C++ (t) WNDX layered native 30 (f) no . C yes wxWind . native free free no . C++ (n) XVT layered native (j) yes no . C/C++ yes YACL . native free free no no C++ . zApp layered native 60(j) free no . C++ $499 Zinc layered native 60(j) free no no C++ yes ------- ----------------------------------------------------------------------- Vendor Type(p) LAF(i) Eval(a) Source Royalty Distrib(z) Language Builder(g)
This table makes the most sense for operating systems that work on various types of hardware (e.g., UNIX, Windows NT) rather than for OSs dedicated to a certain type of hardware (e.g., DOS, Microsoft Windows, Macintosh).
Win32 Sun A U
D O S A Win Mac +++++ +++++ X l L
+++++++ S +++ +++ O M O S P O t A M H P i N
G T 1 3 C 3 3 6 P S x A I p n S I / V r V T S I P A S m n Q E
f x 6 2 I . 2 8 P / 8 X P e O o S U M i M & C P U I G i u N X
x t x x I 1 s k C 2 6 P S n S l C x S x S T O S X X I d x X T
=========================================================================
Alleg - - - - - y c - - c c . - - c c - c . - . . . - c c c - . . .
Amulet - - - - - - - c c - c . . - c c . c . . . . c c c c c . c . .
CLIM . . . . . p . p . . p . . c c c . . c . . . c c c c c . . . .
DCLAP . . . . . c . c c . c . . . c c . c . . . . . . . . . . c . .
Eiffel - - - - - y . p p - c . . c c c . . c c c . c c c c c c c . c
Galaxy - - . . - - y y c y y c b y y c . c c y y . . c y y c . i . .
Garnet - - - - - - - c c - - - - . c c . c . . . . . . c c c . . . .
Graph - - - - - c c p p - c . . - c c . c . . . . c c c c c . c . .
ILOG - - - - - c c - - c c b - c c c - c - - - - - - c c c - . . .
JAM - - - - c c c c c - c c c c c c . c c . c c c c c c c c . . .
Java - - - - - p p . y c y . . . c y . . . . . . . . y c c . y . .
LibWxm . . . . . e . . . . . . . . c . . . . . . . . c c c c . . . .
Menuet . . . c . c . . . c . . . . . . . . . . . . . . . . . . . . .
MAINWin - - - - - e . - - - c c c c c c p c - - - - c - c c y - - - -
MetaCrd - - - - - - - p p - c - - - c c - c - c - c c - c c c - c - -
MEWEL c c . c c e . - . c p p p - c c - - - - - - c - c c - - . . .
MS-MFC - - - - - y y y b . y y y - - - - - - - - - - - - - - - - - -
NuTCRAC - - - - . - - - - - y c c - - - e e e e e e e e e e e e e . .
OberonF - - - - - . c c . - c - - - - - - - - - - - - - - - - - - - -
OpenInt . . . . . c . c c c c c . c c c . c c c c . c c c c c . i . .
OpenUI - - - - y y . y p y c . . - c . c c c c c . c - c c - c . . .
Qt - - - - - - - - - p y . . - c c . y - - - . c . c c c . y . .
ScrMach - c c c c c . - - - p p p - c . c . . c c . c - c c c - . . .
StarVie - - - - y y y y y y y c c c c c - . . p p . p p p c p - p . .
SUIT c . . . . c . c c . . . . c c c . c . . . . . . c c c . . . .
Tcl/Tk p - - - * - c c c p y y y c c c . c c y y . c c c c c . c c c
TWIN - - - - - e e c c p e e e . c c . c - - - c c c c c c . c c .
V - - - - - y . - - p c . . - c c . y . . . . c c y c c . y c .
VisAge - - - - - . . . . c c c . . . . . . . . . . . . . c . . . . .
VisWork . . . . . c . c c c c c . c . . . c . c . . . . c c . . . . .
WNDX c - c c . c c c c c c . . . c c . . . . . . . . c . c . c . .
WMMOTIF - - - - c e - - - - e - - - c c c c - - - c c - c c - - c . .
Wind/U . . . . . e e . . . e e e . y c . c c . c . . p c y y . . . .
wxWind - - . . p c . c c p b - - c c . c . . c . . c c c c y . c . .
XVT - - - - y c c c c c c c - x c c x c c x c c c c c c c - p . .
YACL - - - - - y c - - c c c c - c c . c . c . . c . c c c . c . .
zApp - - - - . c c - - c c c . - y c . - - - - . y . y y c . . . .
Zinc y y y y c y y y y y y c . - c c . c c . p c c c c c c c i c c
=========================================================================
D O S A Win Mac O Win32 Sun I A O U V A S M H A S P L Q N
+++++++ S +++ +++ S +++++ +++++ S X V l M T C I P I G m i N E
G T 1 3 C 3 3 6 P / x A M O S S C P M t S & O P U X I i n X X
f x 6 2 I . 2 8 P 2 8 X I p n o / S r T S X d u T
x t x x I 1 s k C 6 P P e O l U i x
S n S x x
With 800 FTP Read Support
Vendor sale number? BBS? Compuserv? server? USENET? Other contracts
------- -----------------------------------------------------------------------
Alleg . yes no no yes yes (w) 17%/yr (v)
Amulet . no . . yes . (wb) -
CLIM (c) (c) (c) (c) (c) (c) (c) (c)
DCLAP none no no no yes yes . -
Eiffel . no no no yes . (w) yes
Galaxy none yes no no yes yes (wk) $1,995/yr
Garnet none no no no yes yes (wb) no
Graph none no no no yes no (w) .
ILOG 30d yes no yes yes yes (wn) 15%/yr
JAM . ? . . . . (w) .
Java . . . . yes yes (w) .
libWxm . ? . . . . . .
MAINWin 90d yes . . yes . (wh) $2000/yr(e)
Menuet . ? . . . . . .
MetaCrd forever no no no yes yes (bhw) (i)
MEWEL yes no yes yes yes yes (w) $250/yr
MS-MFC . no . . . no (w) .
NuTCRAC 1 year no no no yes yes (w) $500-$750/yr
OberonF . no no no yes yes . yes
OI . ? yes . . yes (w) $1200-$2400/yr
OpenUI 90d yes soon no yes yes (wh) 12%-30%/yr
Qt 1 year no no no yes . (w) 30%/yr
ScrMach 1 year yes no no no yes (hk) 20%/yr
StarVie . yes yes yes no yes (w) -
SUIT . no . . yes . (wd) -
Tcl/Tk (t) no no no yes yes (w) .
TWIN . no no no yes . (w) (p)
V no no no no yes no (w) .
VisAge . yes . . . . (w) .
VisWork (f) yes yes yes (g) . . $675/yr
Wind/U . no no no yes yes (wn) 12%-20%/yr
WMMOTIF 30d yes yes yes yes yes (w) 20/yr
WNDX 30d no yes . soon no (hnw) (p)
wxWind . no no no . yes (w) -
XVT 6 mon. no yes yes yes (r) (wb) (call)
YACL - no no no . yes . -
zApp forever yes yes yes yes yes (w) $395-$1995(a)
Zinc forever no yes yes yes yes (w) $499/yr(j)
------- -----------------------------------------------------------------------
Vendor With 800 BBS? Compuserv? FTP Read Other Support
sale number? server? USENET? contracts