This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

opposition to LSB 2.0 rc1


The LSB 2.0 spec is likely to be announced at LW next week. This is
the first update of LSB in two years, and for the first time includes
a specification for the following libraries: C++, X11, Xext, Xt, GL,
ncurses, and some others.

The draft spec is here:
http://www.linuxbase.org/spec/booksets/LSB-Core/LSB-Core.html
http://www.linuxbase.org/spec/booksets/LSB-Core-IA32/LSB-Core-IA32.html

It is believed that all parts of this spec, with the exception of C++, to be
noncontroversial and adoptable by most current and pending linux
distributions.

The C++ specification is problematic, for several reasons.

1) LSB C++ ABI specification is inadequate and ill-formed. 

   Attempting to qualify the C++ binary interface on linux solely by
   details of the C++ runtime library, without also detailing
   requirements of the underlying compiler, is insufficient. As a
   result the standard may have a fundamental and fatal flaw. Namely,
   that two incompatible C++ implementations, which have the same C++
   runtime library characteristics, are deemed compatible.

2) LSB C++ specification enshrines non-current, inferior technology.
   
   The draft LSB spec implies C++ support implemented by a future
   release of the gcc 3.3 compiler. As of today, the last gcc
   release in this series (gcc-3.3.4) cannot meet the LSB
   specification, although future releases (gcc-3.3.5) may.

   However, the current FSF release of gcc is gcc-3.4.1, which is
   incompatible with the older release series. This release provides
   substantial benefits to users, including increased compiler and
   runtime performance, increased conformance to C99 and C++
   standards, and innovative new features.

   This page has the full details:
   http://gcc.gnu.org/gcc-3.4/changes.html

   In addition, the gcc developers have been working with other
   members of the C++ community, and as such gcc-3.4.x provides
   increased compiler and runtime compatibility with other vendor
   solutions.

3) LSB C++ specification is not multi-vendor.

   The draft LSB spec privileges linux distributions that are based
   on gcc-3.3. For distributions using gcc-3.2, conforming to LSB will
   require the addition of a duplicate yet incompatible system
   library, with the same name, same SONAME, and different path. This
   is problematic from an architectural standpoint, and may introduce
   unsupportable configurations. This may be considered a port of
   Microsoft's "DLL hell" to linux.

   In response, this LSB has advocated the use of dynamic loader
   tricks to solve this issue. A separate dynamic linker with special,
   LSB-only properties would purportedly solve the problem. Especially
   concerning are non-trivial, real-world cases, where applications
   need more runtime support than the subset of libraries standardized
   in the LSB specification. These libraries will drag in their own
   dependencies on the C++ ABI.  The LSB working group has repeatedly
   been pointed to this problem; the problem has been ignored since
   there are no dependencies of any other standardized library on
   libstdc++.  Conforming with the LSB specification just for the sake
   of passing the LSB test suite while ignoring the compatibility
   issues lingering in the shadows is not advisable.

These objections have been explained to the LSB, and their response
has not been satisfactory, although this effort is ongoing. Proposals
to drop the C++ parts of the LSB 2.0 specification were specifically
voted down.

Signed,
Benjamin Kosnik
Ulrich Drepper


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]