1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
|
<html>
<head>
<LINK REL="stylesheet" HREF="styles.css" TYPE="text/css">
<title>FOX-Toolkit</title>
<!-- HTML Copyright 2001 Paul Laufer -->
</head>
<body bgcolor=#ffffff link=#990033 vlink=#4a73ad alink=#ed004f text=#000000>
<!--header-->
<table align=center border=0 cellpadding=0 cellspacing=0 width=100% >
<tr><td bgcolor=silver colspan=5 align=right height=50><img src=art/oul_grey.gif align=left valign=top width=8 height=8><img src=art/foxlogo.png valign=bottom alt="FOX Toolkit" height=50 width=500 border=0 ></td>
<td bgcolor=#557faa valign=top align=right><img src=art/our.gif width=8 height=8></td>
</tr>
<!-- end header -->
<tr>
<td bgcolor=#557faa colspan=2 valign=top align=left> </td>
<td bgcolor=#557faa colspan=3><font color=#ffffff size=+1><center>
<!-- Page Title -->
Platforms!
<!-- End Page Title -->
</center></font></td>
<td bgcolor=#557faa valign=top align=right> </td>
</tr>
<tr>
<td bgcolor=#557faa colspan=2> </td>
<td bgcolor=#ffffff valign=top align=left><img src=art/iul.gif width=8 height=8></td>
<td bgcolor=#ffffff> </td>
<td bgcolor=#ffffff valign=top align=right><img src=art/iur.gif width=8 height=8></td>
<td bgcolor=#557faa width=15> </td>
</tr>
<tr>
<td width=8 bgcolor=#557faa> </td>
<td valign=top bgcolor=#557faa link=#ffffff width=150>
<!-- start navbar content -->
<a href=fox.html><font color=#ffffff>Home</font></a><br>
<a href=news.html><font color=#ffffff>News</font></a><br>
<a href=download.html><font color=#ffffff>Download</font></a><br>
<a href=goals.html><font color=#ffffff>Goals & Approach</font></a><br>
<a href=doc.html><font color=#ffffff>Documentation</font></a><br>
<a href=faq.html><font color=#ffffff>FAQ</font></a><br>
<a href=rex.html><font color=#ffffff>FXRex</font></a><br>
<a href=screenshots.html><font color=#ffffff>Screenshots</font></a><br>
<br>
<a href=adie.html><font color=#ffffff>Adie</font></a><br>
<a href=pathfinder.html><font color=#ffffff>PathFinder</font></a><br>
<a href=calc.html><font color=#ffffff>FOX Calculator</font></a><br>
<br>
<a href=projects.html><font color=#ffffff>Projects</font></a><br>
<br>
<a href='http://fxpy.sourceforge.net'><font color=#ffffff>FXPy</font></a><br>
<a href='http://fxruby.sourceforge.net'><font color=#ffffff>FXRuby</font></a><br>
<a href='http://eiffelfox.sourceforge.net'><font color=#ffffff>EiffelFox</font></a><br>
<a href='http://eevolved.com/foxhole/'><font color=#ffffff>The FOX Hole</font></a><br>
<a href='http://takahr.dhis.portside.net/cgi-bin/rwiki.cgi?cmd=view;name=FOX+FAQ'><font color=#ffffff>Japanese Docs</font></a><br>
<br>
<center>
<a href="http://www.eff.org/br"><img SRC="art/freespeach.gif" border=0></a>
<p>
<a href="http://www.slashdot.org"><img SRC="art/slingerzbutton1.gif" border=0></a>
</center>
<!-- end navbar content -->
</td>
<td bgcolor=#ffffff> </td>
<td valign=top>
<!-- start main window content -->
<center><img src='art/foxstart.png'>
<BR><B>FOX is Platform Indepence</B>
</center>
<p>
<p>
<b>Goals</b>
<hr>
<FONT COLOR="#000000">Developing a single application for multiple platforms
is a difficult task. The most significant issue is the need for a
clean solution for developing Graphical User Interfaces [GUI's].
FOX aims to address this by providing a single GUI library that can run
on different computer hardware and operating system environments.
The benefits to application vendors and developers are clear:</FONT>
<BR>
<OL>
<LI>
<FONT COLOR="#000000"><B>Development effort to support multiple environments
is substantially reduced.</B> After development, your FOX based application
is only a compile away from running on other operating systems. When
multiple hardware and software combinations are required by customers operating
in a heterogeneous environment, using a single GUI system such as FOX is
clearly the most cost-effective method to achieve the goal.</FONT></LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>Availability of your software on other platforms
will engender additional revenues. </B> Without the necessity
of additional development work, the cost of which would have
to be amortized over the number of sales, additional revenues can be engendered
by having your software be available on multiple hardware and software
environments. Software development is a costly undertaking; because
of this, software vendors typically limit the number of platforms to a
small subset of the platforms being used by <I>all</I> customers, effectively
leaving certain customers in the dark. FOX allows applications to
be developed on one platform, then simply recompile the application on
a number of other hardware/software systems. Because the cost of
doing so is negligible, this approach will be able to generate positive
cashflow even with low sales volumes.</FONT></LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>Captive audience.</B> If the application
you're developing is available on all platforms, you may be able to create
a captive customer base on hardware/software systems where your competitor
is absent; you may in fact even be able to charge premium prices.
Using the additional revenues derived from these customers, your product
will be able to derive a steady addional revenue stream which will allow
you to compete more aggressively against your single-platform competitor.</FONT></LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>Higher Quality.</B> For programmers, the benefits
of multi-platform development v.s. single platform development are the
additional confidence and code quality that compiling under different environments
will give. For example, I have compiled FOX on a number of different
systems, and different compilers will discover different types of code
bugs. By compiling on all these different systems, FOX has gotten
quite a bit better in the course of time.</FONT><BR>
<BR></LI>
<LI>
<FONT COLOR="#000000"><B>Control Your Destiny.</B> Programmers understand
it as a matter of course that they need to continually work to track the
changes in a system's API's. But what if the system vendor is also
your competitor? In such a case, you <B><I><U>will</U></I></B> loose,
sooner or later. The FOX GUI Library provides a platform-independent
escape hatch that relies only on core system facilities which can be expected
to be present on any modern operating system.</FONT></LI>
</OL>
<p>
<p>
<b>Approach</b>
<hr>
<FONT COLOR="#000000">FOX attains the goal of platform independence
by eliminating all system dependencies from its public interfaces.
In fact, a typical FOX application may not even need to include any system-specific
header files at all! By not including e.g. X-Windows header files,
applications can not even accidentally slip up and introduce platform dependencies.
This strategy is also carried out inside FOX itself. Thus, large
parts of FOX are in fact defined entirely in FOX itself. The only
dependencies are concentrated in a few select base classes where this couldn't
be avoided.</FONT>
<P><FONT COLOR="#000000">The following salient points highlight some fundamental
benefits of FOX <I>vis-a-vis</I> other purported platform independent toolkits:</FONT>
<BR>
<OL>
<LI>
<FONT COLOR="#000000"><B>Eliminate all platform specific header files</B>.
Applications should only include header files from FOX, and a few header
files for such basic system services as opening files etc.</FONT></LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>Internal Layering. </B>FOX itself relies largely
on FOX base classes, and therefore a large fraction of FOX itself is platform
independent as well.</FONT></LI>
<BR>
<LI>
<B><FONT COLOR="#000000">Rely only on low-level system facilities.
</FONT></B><FONT COLOR="#000000">FOX
relies only on core system facilities, and does NOT wrap native GUI libraries
or toolkits. This has the following benefits:</FONT></LI>
<BR>
<UL>
<LI>
<FONT COLOR="#000000"><B>Identical behaviour.</B> The behaviour will be
close to identical on all systems, as the behaviour is completely controlled
by the FOX implementation, rather than some underlying library.</FONT></LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>Identical looks. </B>FOX applications will look
the same no matter what system you're running it on.</FONT></LI>
<BR>
<LI>
<B><FONT COLOR="#000000">Ability to <I>subclass</I>.</FONT></B><FONT COLOR="#000000">
Because FOX is written from the ground up in C++, and is NOT a C++ wrapper
around some other legacy toolkit or library, FOX Controls may be subclassed
and extended by application programmers. Moreover, if these additions
can be done by calling upon FOX built-in facilities, those additions will
be platform independent also.</FONT></LI>
<BR>
<LI>
<B>Higer Quality.</B> It is a given in software development that those
facilities which are most frequently used are the ones which are most stable.
Thus, by using core system facilities instead of higher-level transient
API's, the impact of the underlying system's instability is minimized.
A chain is as strong as the weakest link, and while I can not control the
quality of the links, I can minimize the number of them.</LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>Higher Speed. </B> Eliminating layers between
FOX and the underlying system not only increases the application's quality,
it will also make it faster, and reduce memory overhead.</FONT></LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>Go to the Bedrock.</B> FOX's core facilities needed
from the target system are things like mouse/keyboard event handling, and
basic graphics facilities such as drawing of lines and rectangles [and
some other system facilities]. In most operating systems, these are
fairly mature API's and not subject to much change. If you want to
build a big building, you need to go down to the solid bedrock. This
is what FOX does.</FONT></LI>
<BR> </UL>
<LI>
<B>FOX is extensible.</B> The FOX library is designed to be open-ended
and extensible. What this means is that unlike other libraries which take
the approach of wrapping legacy GUI toolkits, FOX may be extended with
<I>Custom
Controls</I> and Widgets which will set your application apart from the
others. Building Custom Controls is extremely easy in FOX, as it
is essentially just a matter of C++ subclassing.</LI>
<BR>
<LI>
<FONT COLOR="#000000"><B>FOX is available under Library GNU Public License.
</B>Since
FOX is distributed in source form under LGPL, you have the ability to make
changes or extensions to FOX to suit your needs. Having FOX inspected
by 1000's of programmers all over the world will iron out any bugs it may
have very quickly. This process is already under way.</FONT></LI>
</OL>
<FONT COLOR="#000000">I care a great deal about software quality; I imagine,
so do you. In the course of my programming life, I have ran into
many situations where the bugs I needed to fix were not in my own code,
but in someone else's, and of course I didn't have the source. Thus,
the quality of my own software was limited by the quality of someone else's.
Problem is, the developers of the libraries and software I depend on are
frequently not motivated to make their software correct.</FONT>
<P><FONT COLOR="#000000">This has made me a firm believer in the <I>GPL</I>
or <I>Open Source</I> model of software development. FOX was started in
part because I didn't want to explain to our customers that the reason
X or Y didn't work was because of the broken software or libraries on their
machine. The only way one can create high-quality applications is
to bring as much of the underlying system under one's control as possible.
Hence the <I>Go to the Bedrock </I>philosophy.</FONT>
<P><FONT COLOR="#000000">FOX is not perfect. But as the source code
is available under LGPL, it has the advantage that its imperfections
can be addressed as soon as they are discovered.</FONT>
<BR>
<p>
<p>
<b>Why Windows?</b>
<hr>
Some people may argue that porting FOX to Windows ``helps'' Microsoft.
It doesn't. Porting FOX to Windows <I>does</I> however help <I>application
vendors</I>:- instead of subjugating to a proprietary lock-in GUI environment,
they can now ship their application on a large variety of platforms, like
LINUX, and this with little or no additional effort, and derive additional
revenues.
<P>In addition, being distributed under <a href="http://www.gnu.org">LGPL</a>,
it lowers costs, and does
not incur any license fees for distribution. Being distributed
under LGPL also has the concomittant benefit that a large number of people
may inspect the source code, and spot its inevitable deficiencies; thus,
more bugs are found and they are found more quickly. Remember, the
person which is the most motivated to fix a bug is the one bitten by it;
under the <a href="http://www.opensource.org">Open Source development model</a>,
this person can actually localize, and possibly fix the bug himself, and
<A HREF="mailto:foxgui-users@lists.sourceforge.net">contribute</A> those changes to the library.
<P>Finally, I believe application developers will find the FOX library
a more attractive alternative. For a software developer, the FOX
Library is far more easy to learn, and offers some unique benefits, such
as tying Widgets [Controls] together with little effort, being able to
subclass from existing Widgets to make custom ones, and last but not least
the ability to modify FOX's source code itself if necessary. FOX
represents what I consider to be the ideal GUI Library; I wrote FOX to
use it myself!
<P>
<!-- end main window content -->
</td>
<td bgcolor=#ffffff> </td>
<td bgcolor=#557faa width=15> </td>
</tr>
<tr>
<td colspan=2 bgcolor="#557faa" align=center>
</td>
<td bgcolor=#ffffff valign=bottom align=left><img src=art/ill.gif width=8 height=8></td>
<td bgcolor=#ffffff> </td>
<td bgcolor=#ffffff valign=bottom align=right><img src=art/ilr.gif width=8 height=8></td>
<td bgcolor=#557faa width=15> </td>
</tr>
<tr>
<td valign=bottom align=left bgcolor=#557faa><img src=art/oll.gif width=8 height=8></td>
<td colspan=4 bgcolor=#557faa> </td>
<td valign=bottom align=right bgcolor=#557faa><img src=art/olr.gif width=8 height=8></td>
</tr>
</table>
<address>Copyright 1997-2002 <a href=mailto:jeroen@fox-toolkit.org>Jeroen van der Zijp</a></address>
<!-- Created: Mon Apr 10 11:20:32 CEST 2000 -->
<!-- hhmts start -->
<!-- hhmts end -->
</body>
</html>
|