sun microsystems Systems Architecture Committee _________________________________________________________________ Subject: Apache Standard C++ Library Submitted by: Stefan Teleman File: PSARC/2008/549/opinion.ms Date: October 8th, 2008 Committee: Garrett D'Amore, Kais Belgaied, Mark Carlson, John Fischer, Tim Marsland, Rick Matthews, Glenn Skinner. Product Approval Committee: solaris-pac@sun.com 1. Summary This project seeks to integrate the Apache Standard C++ library version 4.x. This library is conforming implementa- tion of the C++ Standard Library. The project desires that this library is to be the foundation for all future Solaris projects which require a C++ standard library, and super- cedes and obsoletes the libCstd and STLport implementations shipped by DevPro for use in Solaris. Notably, this is only applicable to the Sun DevPro compilers, as GNU C++ ships with its own C++ libraries. 2. Decision & Precedence Information The project is approved as specified in reference [1], but as modified by the required technical change listed in Appendix A below. The project may be delivered in a patch release of the SFW consolidation. 3. Interfaces The project exports the following interfaces. ________________________________________________________________ | Interfaces Exported | |____________________________|______________________|__________| |Interface | Classification | Comments| |____________________________|______________________|__________| |/usr/include/stdcxx4 | Committed | (1) | |/usr/lib/libstdcxx4.so.4 | Committed | (2)(3) | |/usr/lib/libstdcxx4.so | Committed | (2)(3) | |____________________________|______________________|__________| PSARC/2008/549 Copyright 2008 Sun Microsystems - 2 - ________________________________________________________________ | Interfaces Exported | |____________________________|______________________|__________| |Interface | Classification | Comments| |____________________________|______________________|__________| |/usr/lib/pkgconfig/stdcxx.pc| Committed | (4) | |/usr/share/doc/html/stdcxx4 | Committed | | |libCstd | Obsolete Committed | (5) | |STLport4 | Obsolete Uncommitted| (5) | |____________________________|______________________|__________| (1) The include directory includes a number of header files which are required by the Standard. The entire set of header files listed in reference [2] are included by reference herein, with a Committed classification. (2) These libraries are symbolic links to a more specific version of the library, depending on the specific version of Apache C++ used. The actual version (beyond Apache Standard C++ 4.x) is not specified here. (3) In addition, 64-bit versions of these are delivered in the appropriate location (e.g. /usr/lib/amd64 or /usr/lib/sparcv9) also with Com- mitted classification. (4) This is the pkg-config configuration file contain- ing the actual compiler flags that should be used with this library. A 64-bit version of the confi- guration file is located in /usr/lib/${MACH64}/pkgconfig as well. (5) These libraries are marked Obsolete for use in building Solaris components. The DevPro group will continue to deliver them. They remain suit- able for use when building programs which need to run on earlier versions of Solaris. The project imports the following interfaces. ____________________________________________ | Interfaces Imported | |_________|________________|_______________| |Interface| Classification| Comments | |_________|________________|_______________| |libCrun | Committed | C++ runtime. | |libc | Committed | C runtime. | |libm | Committed | Math library.| |_________|________________|_______________| PSARC/2008/549 Copyright 2008 Sun Microsystems - 3 - 4. Opinion 4.1. Base C++ Standard Library This case sets a precedent that allows for projects which desire to deliver components built upon the Standard C++ library can do so, but that they are required to use this library. No other Standard C++ library may be used in the construction of shared objects delivered, as alternate implementations are generally toxic to one another in the same address space. 4.2. Future Incompatible Versions One concern raised is that new versions of the Apache Stan- dard C++ library may become available which are not binary compatible with the version this project proposes to deliver. Generally, this happens on major version boun- daries within the Apache Standard C++ project, and can be expected to support upcoming C++ standards. Such incompati- ble deliveries are required to obtain ARC approval as per normal interface classification rules. 4.3. Obsolete Legacy Libraries As the library delivered by this project is incompatible with alternate implementations, the project team and the DevPro team have agreed that alternate implementations shall be considered Obsolete when used on Solaris versions where this library is delivered. 4.4. New Compiler Flags A member expressed concern over the addition of new flags to the compiler. Specifically, the final disposition of the flags is unknown. The compiler project to add new flags to enable easy use of this library will be handled separately as an LSARC case. 4.5. Existing C++ Components A member raised a concern regarding the status of existing Solaris libraries which are built upon alternate implementa- tions. The project team agreed to take an action item to file bugs against those components to get them converted to use this library after this library integrates. 4.6. Documentation Given the not insignificant caveats about mixing implementa- tions of the Standard C++ library, and the new stability classification for legacy libraries, some members were con- cerned that this information might not be obvious to PSARC/2008/549 Copyright 2008 Sun Microsystems - 4 - developers working with these libraries. The project team agreed to document this in manual pages as specified by the technical chagne required in Appendix A. 5. Minority Opinion(s) None. 6. Advisory Information None. 7. Appendices 7.1. Appendix A: Technical Changes Required 1. The project shall provide documentation in man(1) page form detailing the compatibility concerns for this library. Specifically, the documentation shall explain the incompatibility of mixing alter- nate implementations in the same address space, and shall note that other implementations are Obsolete and should not be used. 7.2. Appendix B: Technical Changes Advised None. 7.3. Appendix C: Reference Material Unless stated otherwise, path names are relative to the case directory PSARC/2008/549. 1. Project proposal (v2) File: proposal_v2.txt 2. Header files File: materials/stdcxx-Appendix-1.txt 3. Localization files File: materials/stdcxx-Appendix-2.txt 4. Apache Standard C++ Library web site http://stdcxx.apache.org/ 5. C++ Standard http://www.open-std.org/jtc1/sc22/wg21/ PSARC/2008/549 Copyright 2008 Sun Microsystems