<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#ffffff">
I want to say thanks to Pat R, Tavarvess W, James S, Jim K, Michael T,
and others who have responded to this inquiry to try to clarify
things. It IS a bit confusing. I want to review each of your replies
in more detail, but for now, I have a few more questions. What I'm
getting from the discussion is that you first have "the core" or the
Linux kernel on GNU Linux and on Android Linux. Serving comparable
duty would be the NT Kernel in Windows and the Mac OSX Kernel on Mac.
Then, wrapped around or sitting on top of the Kernel are various
libraries and functions which make up the API of the OS which
applications can call on. Then, you have the applications themselves
which call on the API to get things done.<br>
<br>
At a binary level, applications for Windows, Mac, GNU Linux, and
Android Linux are not compatible with each other. Even on machines
with comparable and adequate resources, the API's, functions, and
libraries are too different among the various systems, in general. So,
Firefox for Ubuntu is fundamentally different, even though functionally
the same, than for Windows or Mac (if available), for example.<br>
<br>
Even various binary executables for different GNU Linux systems may be
fundamentally different.<br>
<br>
Full desktop OS's like Ubuntu generally will not run on something like
an Android tablet due to resource constraints. A more stripped down
version of GNU Linux may be able to run on a tablet with decent
hardware.<br>
<br>
I'd like to propose a hypothetical development scenario and gather
opinions on what factors will affect the developer.<br>
<br>
I'm making up this scenario, so it may or may not ever happen. Let's
say that I want to create a great application for stellar cartography.
Let's say the user should be able to use a menu and form query system
to select star charts and view them in windows or print them. Let's
say that there are various calculation functions included, so you can
find out how far it is from various points in the galaxy in three
dimensions. Let's say you can also do things like calculate the
cumulative mass of stars in various nebulae and generate reports and
graphs on this data. As I said, I'm just making this up, and I'm not
an astronomer. The point is, that this application, like many, will
have (at least) a GUI UI component, a logic and calculation component,
a database component, and perhaps an output component (printing) other
than the GUI. Let's say I want this application to work on Windows,
Mac, Android Linux, and the top 5 flavors of GNU Linux. A quick check
of distrowatch.com says those are Ubuntu, Mint, Fedora, Debian, and
SUSE. Nothing against the others, but developing for 8 OS's is
probably enough of a challenge for now. The application has to be
functionally identical on each system. We could make allowances for UI
design guides and traditions on each, but might choose to make them all
exactly the same as well. The executables may be different, but the
data files the app creates, loads, and saves must be compatible across
all systems. A user must be able to use the app on any of the
mentioned systems and do exactly the same things, or transport data
from any system to any system. Code reuse must be maximized among
different versions, since I don't want to spend 8X the time it would
take to make one version.<br>
<br>
Putting aside what it actually takes to design a stellar cartography
application, I want to address what it takes to set up the development
environment. I had read somewhere that you can maximize portability
among apps by breaking them into the UI, logic, and database sections,
which is why I structured this the way I did. I added an output
section because it seemed logical and appears that that would encompass
a major subsystem. The stuff I read said that if each subsection is
built as a black box, so to speak, with a clearly defined IO interface
at its boundary, then you could share some black boxes among multiple
systems and customize others for each system.<br>
<br>
Now, as far as I know, C++ standards based compilers are available for
each platform, although I'm not totally sure about Android. Assuming
that's true, then I should be able to make the logic and calculations
"box" identical for each system, with exactly the same code.<br>
<br>
It appears to me that the other "boxes", UI, database, and output;
would have to be customized to each system, based on the API that each
is presenting. So that makes it sound like my code reuse factor is
taking a beating, with somewhere in the range 25% of code that is
common and 75% of code that is unique for each system. However, it
also seems that I may be able to get some help from libraries, such as
FLTK or QT, which are available on different systems. If such things
are available on all these systems, then I can write my app to call the
API of the add on libraries only, and avoid native OS calls. That way,
I would think that I could get my code reuse up to the range of 75% of
code that is common and 25% of code that is unique to each system.
More common and less unique is obviously better.<br>
<br>
I'm trying to set up a development system which will let me do exactly
the type of thing I've described, when I'm ready for it. What I don't
want is a system that forever prevents me from porting my apps to other
OS's. Thus far, I'm thinking GNU tool chain (G++, GCC, GDB, MAKE,
etc.). I know this is available on GNU Linux systems and on Windows,
although I don't know how to install it on Windows at this point. I
don't know for sure if it's available on Mac or Android. I don't own a
Mac or an Android device at this moment, so I cannot test that. I'll
probably use VIM for editing. It would be nice if I can do equivalent
development on any platform, but, if I'm stuck to developing on a
specific system, that's OK. I just have to be able to compile
applications that will run on each system. I'm thinking FLTK to start
as a GUI library. It's available on Windows and GNU Linux. Again, not
sure about Mac and Android. Maybe later, I'd advance to something more
comprehensive. I don't know about database libraries and printing
libraries. Maybe MySQL, etc.<br>
<br>
So, I'd like any advice I can get as to how to build a TRULY cross
platform development environment, which can service all the OS's I
mentioned. Not that I'm ready to publish such an app, nor will I be in
the near future, but I want to be eventually capable of it.<br>
<br>
I just had another idea, which may be great or crazy. Let's say I
encapsulate my app within a VM, even if it is not visible to the user.
Let's take for example, the VM that VirtualBox (or VMWare) presents.
These systems emulate a specific set of hardware every time. So,
assuming I could get the VM "player" modules on each target platform as
part of my app installation, I could just target whatever "machine" API
is being presented to my program by the VM player. I write code solely
to the virtual machine, and ignore whatever is going on in the real
machine. Any resources available on the real machine should be
presented to my app through the VM player's API. Great... or crazy?<br>
<br>
Sometime later, we can talk about version control, IDE's, and packaging
and publishing for the various OS's. As usual, any advice is greatly
appreciated.<br>
<br>
Sincerely,<br>
<br>
Ron<br>
<br>
<br>
<br>
On 8/12/2011 6:21 PM, James Sumners wrote:
<blockquote
cite="mid:CAAt=rgAeEqG+j4TRbxQTWkCdpY2+NFkkapjovh9wBbiDqje=XA@mail.gmail.com"
type="cite">I'm not going to try and trim all of this on an iPad,
sorry. But I want to throw my two cents in on the Android and Ubuntu
are Linux variants. <br>
<br>
Ron, I don't know what distributions you are familiar with, but I think
you use Ubuntu. Try using Debian proper in a VM and see if you can spot
the differences. Ubuntu is a direct "variant" of Debian, and I think
you'll find that the two operating systems are _very_ different. They
are both "Linux" in that they are both based on the Linux kernel from <a
moz-do-not-send="true" href="http://kernel.org">kernel.org</a>. But
they are not the same operating system. <br>
<br>
Another test would be to install CentOS in a VM. The difference between
it and Ubuntu is not at all subtle. <br>
</blockquote>
<br>
<snip><br>
<br>
<blockquote
cite="mid:CAAt=rgAeEqG+j4TRbxQTWkCdpY2+NFkkapjovh9wBbiDqje=XA@mail.gmail.com"
type="cite">-- <br>
James Sumners<br>
<a moz-do-not-send="true" href="http://james.roomfullofmirrors.com/">http://james.roomfullofmirrors.com/</a><br>
<br>
"All governments suffer a recurring problem: Power attracts
pathological personalities. It is not that power corrupts but that it
is magnetic to the corruptible. Such people have a tendency to become
drunk on violence, a condition to which they are quickly addicted."<br>
<br>
Missionaria Protectiva, Text QIV (decto)<br>
CH:D 59</blockquote>
<br>
<pre class="moz-signature" cols="72">--
(PS - If you email me and don't get a quick response, you might want to
call on the phone. I get about 300 emails per day from alternate energy
mailing lists and such. I don't always see new messages very quickly.)
Ron Frazier
770-205-9422 (O) Leave a message.
linuxdude AT c3energy.com
</pre>
</body>
</html>