All, I am sponsoring this fast track for Stefan Teleman of the SFW group. The case directory contains this proposal and a list of deliverables (QT4-Appendix-1.txt). I have set the timeout for Monday, September 1st, 2008.
The project proposes to deliver the QT4 Framework in a Micro/Patch release of Solaris. The QT4 Framework is the cross-platform application development framework toolkit from Trolltech. The QT4 Framework is the base toolkit used in KDE. It is at a similar layer as GTK+ is for GNOME. Thanks, John -------------- next part -------------- ? Including the Trolltech QT4 Framework with Solaris Stefan Teleman <Stefan.Teleman at Sun.COM> 25 August 2008 1. Summary and motivation QT4 [1] is the next-generation cross-platform Application Development Framework Toolkit developed and maintained by Trolltech, ASA [3]. Trolltech's flagship product, QT4 is written in C++, and represents the current research and development achievements at Trolltech. [2] QT4 is used as a Foundation Application Development Framework in numerous and highly specialized software development fields, such as: medical imaging, oil and gas exploration, computer graphics animations, bio-genetics research, chemistry and pharmaceutical research, and many other fields of specialized technical computing. QT4/X11 uses Xlib. It does not use Xt [ the X Toolkit ], Motif, Athena, or any other toolkit. QT/Jambi [4] is a complementary framework to QT4, written in Java. QT/Jambi will be discussed in a separate ARC Case. QT4 is supported on the following platforms: - UNIX: Linux, Solaris, FreeBSD, HP-UX/PA-RISC, HP-UX/Itanium, AIX and IRIX - MS Windows: 2000, XP and Vista - Macintosh: Mac OS X This Fasttrack proposes the integration of the latest QT4 Release, QT 4.4.1. This case seeks Micro/Patch release binding. 2. Technical issues 2.1. Key objects The following table is an abbreviated enumeration of QT4's delivered objects. For the purposes of maintaining brevity, a full and complete list of all the objects delivered by this QT4 Integration will be provided separately, in the ARC Case Supporting Materials directory, Appendix-1. For the purposes of this ARC Case, it is to be assumed that, for any 32-bit executable, or shared object, a corresponding 64-bit object will be delivered by this Integration, in the Standard Solaris ISA directory location, unless the functionality provided by the 64-bit object is unnecessary, in which case the 64-bit object will be omitted from this Integration. /usr/qt4/4.4.1/bin/assistant /usr/qt4/4.4.1/bin/designer /usr/qt4/4.4.1/bin/linguist /usr/qt4/4.4.1/bin/lrelease /usr/qt4/4.4.1/bin/lupdate /usr/qt4/4.4.1/bin/moc /usr/qt4/4.4.1/bin/pixeltool /usr/qt4/4.4.1/bin/qdbus /usr/qt4/4.4.1/bin/qdbuscpp2xml /usr/qt4/4.4.1/bin/qdbusviewer /usr/qt4/4.4.1/bin/qdbusxml2cpp /usr/qt4/4.4.1/bin/qmake /usr/qt4/4.4.1/bin/qt3to4 /usr/qt4/4.4.1/bin/qtconfig /usr/qt4/4.4.1/bin/qtdemo /usr/qt4/4.4.1/bin/rcc /usr/qt4/4.4.1/bin/uic /usr/qt4/4.4.1/bin/uic3 /usr/qt4/4.4.1/doc/html/*.html /usr/qt4/4.4.1/doc/html/images/*.png /usr/qt4/4.4.1/include/Qt/ /usr/qt4/4.4.1/include/Qt3Support/ /usr/qt4/4.4.1/include/QtAssistant/ /usr/qt4/4.4.1/include/QtCore/ /usr/qt4/4.4.1/include/QtDBus/ /usr/qt4/4.4.1/include/QtDesigner/ /usr/qt4/4.4.1/include/QtGui/ /usr/qt4/4.4.1/include/QtNetwork/ /usr/qt4/4.4.1/include/QtOpenGL/ /usr/qt4/4.4.1/include/QtScript/ /usr/qt4/4.4.1/include/QtSql/ /usr/qt4/4.4.1/include/QtSvg/ /usr/qt4/4.4.1/include/QtTest/ /usr/qt4/4.4.1/include/QtUiTools/ /usr/qt4/4.4.1/include/QtXml/ /usr/qt4/4.4.1/lib/libQt3Support.so.4.4.1 /usr/qt4/4.4.1/lib/libQtAssistantClient.so.4.4.1 /usr/qt4/4.4.1/lib/libQtCore.so.4.4.1 /usr/qt4/4.4.1/lib/libQtDBus.so.4.4.1 /usr/qt4/4.4.1/lib/libQtDesigner.so.4.4.1 /usr/qt4/4.4.1/lib/libQtDesignerComponents.so.4.4.1 /usr/qt4/4.4.1/lib/libQtGui.so.4.4.1 /usr/qt4/4.4.1/lib/libQtNetwork.so.4.4.1 /usr/qt4/4.4.1/lib/libQtOpenGL.so.4.4.1 /usr/qt4/4.4.1/lib/libQtScript.so.4.4.1 /usr/qt4/4.4.1/lib/libQtSql.so.4.4.1 /usr/qt4/4.4.1/lib/libQtSvg.so.4.4.1 /usr/qt4/4.4.1/lib/libQtTest.so.4.4.1 /usr/qt4/4.4.1/lib/libQtXml.so.4.4.1 /usr/qt4/4.4.1/plugins/accessible/libqtaccessiblecompatwidgets.so /usr/qt4/4.4.1/plugins/accessible/libqtaccessiblewidgets.so /usr/qt4/4.4.1/plugins/codecs/libqcncodecs.so /usr/qt4/4.4.1/plugins/codecs/libqjpcodecs.so /usr/qt4/4.4.1/plugins/codecs/libqkrcodecs.so /usr/qt4/4.4.1/plugins/codecs/libqtwcodecs.so /usr/qt4/4.4.1/plugins/designer/libarthurplugin.so /usr/qt4/4.4.1/plugins/designer/libcontainerextension.so /usr/qt4/4.4.1/plugins/designer/libcustomwidgetplugin.so /usr/qt4/4.4.1/plugins/designer/libqt3supportwidgets.so /usr/qt4/4.4.1/plugins/designer/libtaskmenuextension.so /usr/qt4/4.4.1/plugins/designer/libworldtimeclockplugin.so /usr/qt4/4.4.1/plugins/iconengines/libqsvg.so /usr/qt4/4.4.1/plugins/imageformats/libqgif.so /usr/qt4/4.4.1/plugins/imageformats/libqjpeg.so /usr/qt4/4.4.1/plugins/imageformats/libqmng.so /usr/qt4/4.4.1/plugins/imageformats/libqsvg.so /usr/qt4/4.4.1/plugins/imageformats/libqtiff.so /usr/qt4/4.4.1/plugins/inputmethods/libqimsw-multi.so /usr/qt4/4.4.1/plugins/phonon_backend/libphonon_gstreamer.so /usr/qt4/4.4.1/plugins/sqldrivers/libqsqlite.so /usr/qt4/4.4.1/plugins/sqldrivers/libqsqlmysql.so /usr/qt4/4.4.1/plugins/sqldrivers/libqsqlodbc.so /usr/qt4/4.4.1/plugins/sqldrivers/libqsqlpsql.so /usr/qt4/4.4.1/share/mkspecs/solaris-cc/qmake.conf /usr/qt4/4.4.1/share/mkspecs/solaris-cc/qplatformdefs.h /usr/qt4/4.4.1/share/mkspecs/solaris-cc-64/qmake.conf /usr/qt4/4.4.1/share/mkspecs/solaris-cc-64/qplatformdefs.h QT4 is thread-safe, 64-bit clean and largefile aware. The 64-bit QT4 libraries, the associated loadable shared objects [ plugins ] and the necessary 64-bit executables will be delivered with this Integration. 2.2. C++ ABI Considerations The C++ Language Standard [ ISO/IEC 14882:2003 ] [8] did not define an ABI for the C++ Programming Language. Although several efforts aimed at defining a common C++ ABI have existed in the past, no consensus was ever reached. As a direct result of this lack of an unified C++ ABI, binary object code emitted by different C++ compilers is not interchangeable, and is likely to be binary incompatible across different C++ Compilers, or different Minor or Major releases of the same C++ Compiler, or across different C++ runtime environments. Simply put, binary object code resulting from the compilation of C++ Language code is dependent on, and tied to, the compiler emitting it, and to the compiler which has emitted the binary object code for the C++ runtime, and for the Standard C++ Library. The PSARC Opinion from PSARC/2002/348 [6] is the Defining Reference for this ARC Case. PSARC 2002/348 mandates that all C++ software which exposes public API's in Solaris must be compiled with the Sun Studio Compilers, and with Version 5 of the Sun C++ ABI. For the purposes of delivering and maintaining a coherent, consistent and compatible C++ ABI, this Integration of QT4 will be built with the Sun Studio compiler suite, which has maintained C++ ABI compatibility since Release 5.0 [ Workshop 5 ]. [7] [8] The Sun Studio compilers are supported by Trolltech ASA. 2.3. Programmatic facilities QT4 follows the "component object development model", suitable for an object-oriented framework. In addition, QT4 has extended the inherently statically typed C++ Object Model by implementing the QObject base type as the "Root Object" of [ almost ] all QT4 types. By design, and unlike Smalltalk or Java, C++ does not provide a toplevel "object" type functioning as root of the inheritance graph. The omission of this "root object" type from the design of the C++ Language was intentional: one of C++'s stated goals was type safety, and the implementation of such an Object Type, if deemed necessary, was delegated to the writer of the application, or framework. A direct consequence of this design decision is that, in C++, object types are not related to each other by language design [ unlike Smalltalk or Java ]. As a result, in C++, object types can only "talk" to their "relatives" if a relationship already exists [ which assumes that the objects involved in sending or receiving messages are related, or can type-convert ], or, absent such a relationship, a message-passing facility between statically typed, unrelated object types has been devised. One approach to solving this problem is described in the "Design Patterns [ GoF ] Book [5], and a canonical example of such a double-dispatch implementation are the Mediator and Observer Patterns. The QT4 Object Model implements the "root object" pattern, and the Message Passing facility is achieved via QT4's signal/slot mechanism. QT4's signal/slot mechanism is type safe: the method signature of a signal must match the method signature of the receiving slot. Method signature mistmatches are detected by the compiler, at compile-time. Signals and slots are loosely coupled: an Object Type emitting a signal does not know, nor does it care, which slot receives its signal: the connection between a signal and a slot must be explicitly defined by the application. [6] The runtime signal/slot type safety mechanism is enforced by the supporting meta-object generated by the Meta-Object Compiler [ moc ]. The Meta-Object Compiler generates additional methods for each particular object type's signal/slot declarations. QT4 provides a rich feature set of client-server connectivity and external component integration facilities: database connectivity, either via UnixODBC [11] plugins, or via specific database engine plugins: MySQL5 [12], PostgreSQL [13], SQLite3 [14], printing [ via CUPS [10] ], and Desktop IPC integration [ via D-BUS [15] ]. QT4 provides a QT3 compatibility layer, and a QT3 migration toolkit. [5] There are no plans for integrating QT3 in Solaris at this time. 2.4. Language Bindings QT4 is written in a subset of Standard C++ [8] which has been known to be portable across all the platforms and compilers supported by Trolltech ASA. Sun Studio is one of the supported compiler sets. A complete list of all platforms and compilers supported by Trolltech ASA is available at http://doc.trolltech.com/4.4/supported-platforms.html. [17] 2.5. Internationalization QT4 supports Internationalization and multibyte characters by default, via full Unicode [16] support [ QT4 supports both Unicode and non-Unicode fonts]. The "linguist" QT4 application is an intuitive GUI application which reads extracted source text, and provides context information ready for translation. The "linguist" application will output a translation file ready for internationalized application use. QT4 provides on-the-spot editing support for the X Input Method Extension. 2.6. Documentation The canonical QT4 release delivers a complete documentation set in HTML format. QT4 does not provide documentation in UNIX Manual format. A generic UNIX man page [ qt4.4qt ] providing pointers to the installed HTML Documentation will be provided with this Integration. The HTML QT4 documentation is accessible either via a Web Browser, or via QT4's 'assistant' application. 3. Interfaces 3.1. Interface Stability QT4 maintains API and ABI compatibility between Micro Releases, but not between Minor and/or Major Releases. However, Trolltech ASA provides API and ABI compatibility guarantees within the boundaries of a QT4 Micro Release. It is very likely that several QT4 Integrations, which may be binary incompatible with each other, will have to coexist: Developer Preview Releases of QT 4.4 and QT 4.5/4.6 are already available for download from Trolltech. This Fasttrack proposes an overall "Uncommitted" Interface Stability Classification for QT4. Considering the ABI Micro Release Stability guarantee provided by Trolltech ASA, a "Committed" Interface Stability Classification would have been appropriate. However, QT4's dependency on External/Evolving/Uncommitted Interfaces makes an overall "Committed" Interface Classification inaproppriate. Furthermore, QT4 will follow a directory layout structure modeled after Perl 5 [ PSARC/1999/192 [7] ]: /usr/qt4/[version]/bin /usr/qt4/[version]/bin/${MACH64}/ /usr/qt4/[version]/lib /usr/qt4/[version]/lib/${MACH64}/ /usr/qt4/[version]/include [ ... ] 3.2. Imported Interfaces QT4 imports interfaces from the Standard C Library, Standard Math Library, and the POSIX Threads Library. In addition, QT4 imports Interfaces from the Standard C++ Library, the C++ Runtime Library, the Socket Library, the Network Services Library, and a number of X11, OpenGL and graphics libraries [ LibPNG, LibTIFF, LibJPEG, LibMNG ]. QT4 also imports interfaces from CUPS [10] UnixODBC [11] and D-BUS [15]. Optionally, and a highly desirable feature set, QT4 can directly import interfaces from MySQL5 [12], PostgreSQL [13] and SQLite3 [14], bypassing UnixODBC [11] altogether. NAME STABILITY NOTES SUNWlibC Committed LSARC/2004/284 LibPNG Evolving LSARC/2003/085 LibTIFF Evolving LSARC/2003/085 LibJPEG Evolving LSARC/2003/085 LibMNG Uncommitted PSARC/2008/072 LibXPM Evolving PSARC/2001/060 Z-Lib Committed PSARC/2006/537 LibFreetype2 External LSARC/2005/397 LibFontconfig External LSARC/2003/273 LibXFT External LSARC/2003/274 LibX11 External LSARC/2004/685 LibXRender External LSARC/2004/685 LibXRandR External LSARC/2004/685 CUPS Uncommitted PSARC/2008/130 UnixODBC Uncommitted LSARC/2007/684 D-BUS External LSARC/2006/368 SQLite3 Uncommitted PSARC/2008/120 MySQL5 Uncommitted LSARC/2007/608 MySQL5 [ 64-bit ] Uncommitted LSARC/2008/150 PostgreSQL 8.3 Uncommitted LSARC/2008/004 PostgreSQL [ 64-bit ] Uncommitted LSARC/2007/553 OpenSSL Uncommitted PSARC/2003/500 OpenSSL [ 64-bit ] Uncommitted PSARC/2004/768 GStreamer Uncommitted LSARC/2004/713 3.3. Exported Interfaces For the purposes of this document, the abbreviation [$QT4] refers to the toplevel directory location of a particular QT4 [ Major.Minor.Micro ] Integration. NAME STABILITY NOTES SUNWqt441core Uncommitted Package Name SUNWqt441demo Uncommitted Package Name SUNWqt441doc Uncommitted Package Name SUNWqt441usr Uncommitted Package Name [$QT4]/bin/assistant Uncommitted Executable location [$QT4]/bin/designer Uncommitted Executable location [$QT4]/bin/linguist Uncommitted Executable location [$QT4]/bin/lrelease Uncommitted Executable location [$QT4]/bin/lupdate Uncommitted Executable location [$QT4]/bin/moc Uncommitted Executable location [$QT4]/bin/pixeltool Uncommitted Executable location [$QT4]/bin/qdbus Uncommitted Executable location [$QT4]/bin/qdbuscpp2xml Uncommitted Executable location [$QT4]/bin/qdbusviewer Uncommitted Executable location [$QT4]/bin/qdbusxml2cpp Uncommitted Executable location [$QT4]/bin/qmake Uncommitted Executable location [$QT4]/bin/qt3to4 Uncommitted Executable location [$QT4]/bin/qtconfig Uncommitted Executable location [$QT4]/bin/qtdemo Uncommitted Executable location [$QT4]/bin/rcc Uncommitted Executable location [$QT4]/bin/uic Uncommitted Executable location [$QT4]/bin/uic3 Uncommitted Executable location [$QT4]/bin/${MACH64}/designer Uncommitted Executable location [$QT4]/bin/${MACH64}/pixeltool Uncommitted Executable location [$QT4]/bin/${MACH64}/qdbus Uncommitted Executable location [$QT4]/bin/${MACH64}/qdbuscpp2xml Uncommitted Executable location [$QT4]/bin/${MACH64}/qdbusviewer Uncommitted Executable location [$QT4]/bin/${MACH64}/qdbusxml2cpp Uncommitted Executable location [$QT4]/bin/${MACH64}/qt3to4 Uncommitted Executable location [$QT4]/bin/${MACH64}/qtconfig Uncommitted Executable location [$QT4]/bin/${MACH64}/qtdemo Uncommitted Executable location [$QT4]/doc/html/*.html Uncommitted HTML Documentation [$QT4]/doc/html/images/*.png Uncommitted Documentation Graphics [$QT4]/include/Qt/ Uncommitted Header files [$QT4]/include/Qt3Support/ Uncommitted Header files [$QT4]/include/QtAssistant/ Uncommitted Header files [$QT4]/include/QtCore/ Uncommitted Header files [$QT4]/include/QtDBus/ Uncommitted Header files [$QT4]/include/QtDesigner/ Uncommitted Header files [$QT4]/include/QtGui/ Uncommitted Header files [$QT4]/include/QtNetwork/ Uncommitted Header files [$QT4]/include/QtOpenGL/ Uncommitted Header files [$QT4]/include/QtScript/ Uncommitted Header files [$QT4]/include/QtSql/ Uncommitted Header files [$QT4]/include/QtSvg/ Uncommitted Header files [$QT4]/include/QtTest/ Uncommitted Header files [$QT4]/include/QtUiTools/ Uncommitted Header files [$QT4]/include/QtWebKit/ Uncommitted Header files [$QT4]/include/QtXml/ Uncommitted Header files [$QT4]/include/QtXmlPatterns/ Uncommitted Header files [$QT4]/lib/libQt3Support.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQt3Support.so.4 Uncommitted SONAME [$QT4]/lib/libQtAssistantClient.so.4.4.1 Shared Library [$QT4]/lib/libQtAssistantClient.so.4 Uncommitted SONAME [$QT4]/lib/libQtCore.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtCore.so.4 Uncommitted SONAME [$QT4]/lib/libQtDBus.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtDBus.so.4 Uncommitted SONAME [$QT4]/lib/libQtDesigner.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtDesigner.so.4 Uncommitted SONAME [$QT4]/lib/libQtDesignerComponents.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtDesignerComponents.so.4 Uncommitted SONAME [$QT4]/lib/libQtGui.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtGui.so.4 Uncommitted SONAME [$QT4]/lib/libQtNetwork.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtNetwork.so.4 Uncommitted SONAME [$QT4]/lib/libQtOpenGL.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtOpenGL.so.4 Uncommitted SONAME [$QT4]/lib/libQtScript.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtScript.so.4 Uncommitted SONAME [$QT4]/lib/libQtSql.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtSql.so.4 Uncommitted SONAME [$QT4]/lib/libQtSvg.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtSvg.so.4 Uncommitted SONAME [$QT4]/lib/libQtTest.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtTest.so.4 Uncommitted SONAME [$QT4]/lib/libQtWebKit.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtWebKit.so.4 Uncommitted SONAME [$QT4]/lib/libQtXml.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtXml.so.4 Uncommitted SONAME [$QT4]/lib/libQtXmlPatterns.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/libQtXmlPatterns.so.4 Uncommitted SONAME [$QT4]/lib/${MACH64}/*.so.4.4.1 Uncommitted Shared Library [$QT4]/lib/${MACH64}/*.so.4 Uncommitted SONAME [$QT4]/plugins/accessible/*.so Project Private QT4 Plugins [$QT4]/plugins/codecs/*.so Project Private QT4 Plugins [$QT4]/plugins/designer/*.so Project Private QT4 Plugins [$QT4]/plugins/iconengines/*.so Project Private QT4 Plugins [$QT4]/plugins/imageformats/*.so Project Private QT4 Plugins [$QT4]/plugins/inputmethods/*.so Project Private QT4 Plugins [$QT4]/plugins/sqldrivers/*.so Project Private QT4 Plugins [$QT4]/plugins/${MACH64}/*/*.so Project Private QT4 Plugins [$QT4]/share/mkspecs/solaris-cc/qmake.conf Uncommitted QT4 qmake compiler configuration [ 32-bit ] [$QT4]/share/mkspecs/solaris-cc/qplatformdefs.h Project Private QT4 Platform-specific header file [$QT4]/share/mkspecs/solaris-cc-64/qmake.conf Uncommitted QT4 qmake compiler configuration [ 64-bit ] [$QT4]/share/mkspecs/solaris-cc-64/qplatformdefs.h Project Private QT4 Platform-specific header file [$QT4]/share/phrasebooks/danish.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/dutch.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/finnish.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/french.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/german.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/italian.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/japanese.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/norwegian.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/polish.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/russian.qph Project Private QT4 Phrasebook File [$QT4]/share/phrasebooks/swedish.qph Project Private QT4 Phrasebook File 4. References [1] http://trolltech.com/products/qt [2] http://trolltech.com/pdf/qt43-whitepaper-a4.pdf [3] http://trolltech.com/ [4] http://trolltech.com/products/qt/jambi/ [5] http://trolltech.com/products/qt/qt3 [6] http://www.opensolaris.org/os/community/arc/caselog/2002/ PSARC/2002/348 [7] http://www.opensolaris.org/os/community/arc/caselog/1999/ PSARC/1999/192 [8] http://www.open-std.org/jtc1/sc22/wg21/ [9] Sun C++ ABI 5.0: LSARC/1994/323 LSARC/1997/150 LSARC/2000/211 et seq. [10] http://www.cups.org/ [11] http://www.unixodbc.org/ [12] http://www.mysql.com/ [13] http://www.postgresql.org/ [14] http://www.sqlite.org/ [15] http://www.freedesktop.org/wiki/Software/dbus [16] http://www.unicode.org/ [17] http://doc.trolltech.com/4.4/supported-platforms.html