[openbeos] Re: binary middle ground
- From: "Erik Jakowatz" <erik@xxxxxxxxxxxxxx>
- To: openbeos@xxxxxxxxxxxxx
- Date: Mon, 10 Sep 2001 20:05:31 -0700
There were a lot of responses, and I'm sure a bunch I haven't read yet
(still catching up), so hopefully I'm not saying something totally
redundant.
Having said that, I would like to suggest what I think is the most
viable route for us to take. First, let us assume that all apps use
only the public APIs. I think this is fairly reasonable since any app
utilizing private APIs was already in danger of being broken if the next
release of BeOS changed or removed the private API. Working from this
premise, we have only to insure that we reproduce the public APIs
faithfully. To wit:
- Class names and inheritance hierarchies must be the same
- Public and protected function signatures must be the same
- The vtable layout must be the same
- The data size of classes must be the same
These requirements are actually not as restrictive as they might seem.
We can declare any number of private non-virtual functions we might need
and completely omit those which do not suit our implementation -- these
do not affect the vtable layout, the public interface or the class size.
If our implementation of a class has less data, we simply pad the
object. If we need more, we convert four bytes of the class data into a
pointer to a struct holding our additional data. If we stick to this,
all sanely written apps *should* run out of the box.
Now, the first objection I can see someone making is that this
compromises our "drop-in component" strategy, and to an extent this is
true -- but I don't think we're going to reasonably be able to just
replace the app_server, for example, and have it work with the original
libbe.so anyway. Decoding the interactions will be too difficult and
time-consuming to be worth the effort, especially since these are
behind-the-scenes interactions which apps and non-dependent parts of the
system shouldn't care about. What we *can* do, however, is identify
what parts of the system are dependent on each other in a way that would
be difficult (or even nearly impossible) to reimplement. Then we
consider those interdependent systems as single entities for drop-in
replacement.
At any rate, this is the approach the interface kit team is
contemplating. We'll be working on the interface kit, the app kit and
app_server (plus a couple of other little, dependent things) as
sub-systems within a larger system that we'll be looking to drop-in.
Oh, and quickly, with regards to the "patched compatibility" solution, I
don't see any real difference between this approach and the fully binary
compatible solution -- either way, you're presenting the same function
signatures and providing the same functionality (which we have to do no
matter what solution finally gets implemented). The only difference I
see is that in the "patched" solution, the original function is a stub
which calls another function to do the actual work. Why not just have
the functionality right there? Delegating isn't going to gain anything
here, IMO.
e
>In light of the recent information and discussion concerning binary
>compatibility, I thought I'd rehash the issues and propose a middle
>ground.
>
>The original OpenBeOS Charter was drafted with both source and binary
>compatibility in mind. Source compatibility is a no-brainer: if you
>don't have that, you don't have BeOS but some other OS instead. That
>may be a worthy project, but it's not what OpenBeOS is about, so that
>issue is settled.
[much snipping happened here]
Data is not information, and information is not knowledge: knowledge is
not understanding, and understanding is not wisdom.
- Philip Adams
- Follow-Ups:
- [openbeos] Re: binary middle ground
- From: Michael Phipps
- [openbeos] Re: binary middle ground
- From: Jean-Baptiste Queru
Other related posts:
- » [openbeos] binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- » [openbeos] Re: binary middle ground
- [openbeos] Re: binary middle ground
- From: Michael Phipps
- [openbeos] Re: binary middle ground
- From: Jean-Baptiste Queru