Magnussoft, the company now responsible for development on Zeta, has announced it is accepting pre-orders for Zeta 1.21. This new release will include multi-user support, will be built with GCC4, among other improvements. Bernd Korz's weblog contains more information. Korz was (is?) the CEO of YellowTAB, the company that started Zeta. Read on for a short editorial on this announcement.

This is not Slashdot. You are allowed to read a comment before you reply to it.

I believe rayiner was mearly suggesting that they can supply both a GCC 2.95 and GCC 4 version of the library, with different major numbers E.g. libfoo.so.1 and libfoo.so.2 Old applications will continue to use the "old" GCC 2.95 version of the library (libfoo.so.1) while any new applications compiled with GCC 4 will use the new GCC 4 version of the library (libfoo.so.2) There is no need to wrap the GCC 4 version of the library, although I agree it would be possible, and possibly even desirable if you wish to reduce redundency.

P.S: The cross-vendor C++ ABI solved the ABI compatability problem many years ago, and has been used by GCC since the release of GCC 3.0.
P.P.S: The fragile base class problem has nothing to do with the version of GCC you're using.

Rayiner has been treating many people in a very insulting condescending manner, reading every possible negative into answers, real or imagined to past posts, including mine: I am utilizing the golden rule in this case, as that seems to be all he understands when it comes to "being right" since he can't accept the possibility that someone can have a different interpretation and be right about something, or that someone could actually have replied too quickly for him to realize that's not entirely what the responder meant. Rayiner has a long history of going out of his way to be abusive and putting people down and lord his would-be expertise over everyone else.

For BeOS, it'd be a rather major hassle to run binaries using both versions of the C++ compiler because of the ABI differences and the fact that BeOS is so heavily C++-based that applications compiled for the 2.9x compiler and libraries won't interoperate correctly (if at all) with anything using a later version of the C++ compiler. The link I provided explains that the ABI is more complex than merely the class layout (which the fragile base class problem is tied into, and why it wouldn't be remotely feasible to do what Rayiner was suggesting: if he's invoking ELF linking things together between 2.x and using a 3.x library to interface with a 4.x system, and there's been other changes in the C++ compiler between that, indicates that he's not fully aware or thinking about binary layouts of C++ objects) but also in how C++ exceptions are handled. Thus, a 3.0 C++ application wouldn't fully work correctly with a 4.x library in many cases, regardless of the name mangling being resolved by the ELF loader. Sure, you can lie to a program loader, but that doesn't mean you will get what you want.

So in one respect, yes, you're right: the fragile base class problem doesn't change the fact one way or the other that you can't use 4.x or even 3.x binaries directly with a 2.x application, but it definitely doesn't help. However, there *is* a way to create a C++ API that doesn't suffer from the fragile base class problem, without using the hack that BeOS used to reserve space, or using the COM method of peeling off interfaces from the base class interface. But if there's any time to add things to the basic classes of Zeta, they might as well do it when transitioning to the 4.x compiler, so base classes have cleaner interfaces without worrying about the headers being in a weird mess, at least to start. At some point closer to Haiku R1 release date or shortly thereafter, I'll create a demonstration and proposal of the C++ API that isn't vulnerable to the fragile base class problem as a proposal for Haiku R2 (no, it doesn't reserve space, either!).

To include the entire API again would needlessly expand the entire install base. If you are breaking binary compatibility, it should be all or nothing IMO. (Isn't that what Syllable dod to the original libAtheos.so?) You then have issues like linking drivers to the Kernel, input filters to the input server, various bits and pieces to the App server. That's just the tip of the iceberg.

I've looked at writing a thunking layer for BeOS to allow GCC 3.x to be used in plain R5.03. Way, way too much work.

as far as i know from "first hands" for YT 1.2 were plans (and probably working version) to full support of Be API with GCC 4.*, while basically OS itself was built with 2.9*. So they planned to support both ABIs for transitional version but in "opposite" way.

Fair enough. It was my understanding that BeOS/Zeta/Haiku used ELF and GCC as a system compiler. Following a symbolic link at compile time is a job for ld, and I'm going to ass-u-me that BeOS/Zeta/Haiku also use GNU binutils, yes?

Can the BeOS/Zeta/Haiku RTLD seriously not tell the difference between the filenames "libfoo.so.1" and "libfoo.so.2" in the DT_NEEDED section? Does it ignore the second part of the filename?

Even if it can't do that, it doesn't really change my point though, just the mechanism. Instead of libfoo.so.1 and libfoo.so.2 you could have libfoo.so and libfoo_2.so if you so wished; they are distinct libraries. Provided you do not try to mix GCC 2.95 and GCC 4 libraries together it should work.

This is exactly how we handle ABI changes in libsyllable. Whenever the ABI changes we increment the DSO version and ship the previous versions for compatability. So an installed system may have libsyllable.so.5, libsyllable.so.6 and libsyllable.so.7 installed. The only time this couldn't be done sensibly was when we upgraded to Glibc 2.3, which involved much deeper voodoo and it was easier to drop the old libraries.