July 2000 Application Compatibility with Solaris 8This section provides information on:
Binary CompatibilityA common problem in evolving computing environments is ensuring that applications continue to run despite changes to the underlying system's infrastructure or environment (hardware and software). The following sections describe a methodology for defining a safe and stable system interface for applications, and then for checking application binaries to determine if they are relying on unstable system interfaces, which would put them at risk when the operating system is later upgraded.
Existing 32-bit SPARC applications are binary compatible and can run in either the 32-bit or 64-bit operating environment. The only exceptions are those that deal with kernel memory or
The Problem of Cross-Release StabilityWhen end users upgrade to a new release of the operating system, they are concerned about what happens to the applications and other layered software products that they use to run their businesses. Their desire is that all of their application binaries will run on the new system without change.
Without such release-to-release stability, or binary compatibility for applications, end users face a dilemma: even though each successive release of the system software may be desirable, upgrading may not be possible because a large investment has been made in the applications and one or more of these applications may fail to work on a new release. Consequently, application breakage is a serious problem for both software users and producers.
The System/Software Ecosystem
The figure shows the layering of dependencies between software products that form an overall system. Instability occurs when any product upon which other products depend is changed in a way that introduces an incompatibility.
Reasons for Application BreakageThere are two fundamental reasons for application breakage that are worth considering. First, the operating system has undermined one or more legitimate dependencies that existing applications had upon the system. Second, one or more applications relied on something that was not intended for their use and that internal part has now been changed in an incompatible way.
The basic solution to these problems is to identify clearly which interfaces are public and stable (that is, those constrained to strictly upward compatible change), and to restrict applications entirely to those stable interfaces.
To achieve this, the Solaris Application Binary Interface (ABI) Program provides a tool (
See the section Useful Tools for Checking Application Compatibility of this white paper for more information.
Defining the Application Runtime InterfaceAn application gains access to system services in Solaris software by making procedure calls to interfaces in the system's shared libraries. Since every dynamically linked application must do this, this is the starting point used to define the Solaris ABI.
The ABI specifies, first at shared library level, and then at the level of global symbols within those shared libraries, which system shared objects are intended for application use. The ABI system model provides a complete list of interfaces available in the bundled Solaris product, thus describing the public (that is, stable and committed) and private (unstable) interfaces of a given release of Solaris, where the public constituent is an upward compatible evolution.
Solaris ABI definitions are provided intrinsically with the ABI-conformance checking tool
More InformationLinks:Other Documents:
Source CompatibilitySource level compatibility has been maintained for 32-bit applications. For 64-bit applications, the principal changes pertain to the data types used in the application-programming interface.
32-bit applications will continue to run on either a 32-bit or 64-bit operating environment except those that deal with kernel memory or
Data ModelThe C type data model chosen for Solaris 8 is LP64, where long pointers are 64 bits, hence LP64. The following table shows the 32-bit and 64-bit data model.
Following are the derived types recommended for use:
Programmers need to be aware of this difference to make their applications work in both 32-bit and 64-bit environments.
Using Derived TypesIn general, it is a good idea to use derived types for definitions to allow for changes. Moreover, using the Solaris system derived types will help make the code 32-bit and 64-bit safe, since the system derived types are themselves safe for both environments.
For source compatibility, recommended system include files are
More information on derived types can be found in Why 64-bits? in this white paper.
Loopholes to Look ForMany problems arise from longs or pointers changing size in LP64. First, unlike ILP32, the assumption that ints, longs, and pointers are the same size is no longer true. This change alone is the cause of most problems in making the existing code both 32-bit and 64-bit safe, because a lot of code assumes that ints and pointers, and ints and longs, are the same size.
Second, data structures involving longs and pointers have to be checked. Structures are aligned by their longest (largest) member. There may be a wasted space in structures because of alignment differences from long and pointer fields growing to 64 bits. Unions may no longer make sense because of the difference in size.
Third, declarations and casts are very important in showing what is intended; how expressions are evaluated may change since the types have changed. Type conversion rules are affected by the change in data sizes. To adequately show what is intended, even the types of constants should be declared. Casts may also be needed in expressions to make certain that the expression is evaluated the way the programmer meant. Some examples are described in 64-bit Application Support in this white paper.
The fourth reason for application breakage is changes in the header files. In Solaris 8, one such change has occured that may cause binary and, in some remote cases, source incompatibility issues. The header file
Application Environment CompatibilityThis section discusses changes in the Solaris 8 operating environment that may affect some existing applications. It also covers the potential application compatibility issues that might surface when moving an application to the Solaris 8 operating environment.
The section Solaris 8 Features in this white paper details how and why your application can improve under Solaris 8.
How to Check your Application for Compatibility Issues
More InformationSee Performance and Scalability Enhancements in this white paper.
Man Pages:
New Device NodesThere are new device nodes in Solaris 8. If applications depend on third-party device nodes, then the node names should be checked for conflicts with Solaris 8 device names.
Example of a new device node:
/dev/poll --> ../devices/pseudo/poll@0:poll This is a pseudo-device-node. There is a possible conflict if the application already uses a device named
Possible solution: Rename the application's old
More InformationMan Pages:
Application Localization
|
Yes |
Force installation of the conflicting files. The Solaris 8 secure permissions will be overwritten. |
No |
Do not install the conflicting files. The secure permissions will be kept and installation will continue. Since the default directory attributes are sound, this should not be a problem. |
Quit |
Quit installation. |
It is rare that a package will set system directory permissions because the application requires it. That might not be a safe practice, which is why pkgadd gives warnings about conflicting files; after all, pkgadd runs as root.
To avoid such conflicts, new packages should change the pkgmap file to use "????" in the mode field, indicating that permissions should be left unchanged (the directory/file in question must already exist on the target machine).
Example of pkgmap using "????":
: 1 760 202 1 i copyright 59 5209 941836613 1 i depend 374 28782 941836618 1 i pkginfo 435 33930 941836710 1 d none usr ???? root sys 1 d none usr/bin ???? root bin 1 f none usr/bin/audioconvert 0755 root staff 220752 51906 941828551 1 f none usr/bin/audioplay 0755 root staff 109640 5526 941828542 1 f none usr/bin/audiorecord 0755 root staff 27704 13586 941828547
pkgproto(1)
prototype(4)
pkgmk(1)
pkgadd(1M)
Some obsolete features have been removed from Solaris. To review the features removed since Solaris 2.5.1, see the section Features Dropped from Previous Solaris Releases in this white paper.
This section describes the various programs that are available to Independent Software Vendors (ISVs) to ensure their applications are Solaris 8 Ready.
The section Application Environment Compatibility in this white paper also applies to third-party applications. This means that potential incompatibilities with the Solaris 8 operating environment apply equally to applications developed in-house and applications developed by a third-party ISV.
Note: It is possible that some of the direct links provided below have changed since this document was written. In that case, go to http://www.sun.com and search by keyword.
Solaris Ready is a very strict branding program. Applications that comply with the necessary criteria may use the Solaris Ready logo in packaging and advertising. You do not need the logo just to be able to run your application on Solaris 8.
Compliance with appcert is just one of the compliance criteria for the Solaris Ready logo.
If you have a specific question about Solaris Ready programs, write to: solarisready@keylabs.com.
The sun4c, SPARCstationTM Voyager, and SPARC Xterminal 1 platforms are not supported with Solaris 8. Attempts to install will produce the message: This hardware platform is not supported by this release of Solaris. Hardware models not supported are:
Migrating from one release of Solaris to the next provides certain challenges to Solaris users. Applications that use unstable "private" Solaris interfaces are at risk of failure if those particular interfaces change their syntax or semantics in a subsequent release of Solaris. Up until now, there has been no easy way to identify which applications might be at risk, or of determining the severity of that risk. Now, however, there are tools from the Solaris ABI Program that can greatly simplify this process. Using these tools will help programmers to find out if a binary or a shared object will run on the next release of Solaris.
One of the tools, appcert, will help to identify public and private interfaces used by programs under test. It can also identify demoted symbols (symbols that are removed from the current release) and unbound symbols (symbols that rely on the executables that link against them).
Public interfaces are the standard interfaces such as System V Interface Definition (SVID) and Solaris interfaces such as those in libthread.so.1. These interfaces contribute to the total Solaris ABI.
Private interfaces are referred to as "internal to system implementation" and are not intended for use by applications or any other layered software product. These interfaces are subject to incompatible changes in subsequent minor releases of the library or the system release. These interfaces may become a public interface, remain an internal moving part, or disappear.
The appcert tool is a Perl script that statistically examines Executable and Linking Format (ELF) binaries and their shared objects to see what Solaris library interfaces they use. It uses models of the Solaris ABI that extend from Solaris 2.3 to Solaris 8. Note that appcert only examines C language interfaces; other language bindings such as C++ and Java are not covered.
appcertTo run appcert, provide it with the name of one or more binaries to check, or one or more directories that contain the binaries to check. appcert will recursively examine subdirectories to locate binaries.
appcert first makes sure that the file is suitable for checking (it must have execute permissions set and not be suid root), then collects the binary symbols. These symbols are then checked against the model of public and private symbols for that library in that specific release of Solaris.
appcert OutputAppendix A (Sample Summary Report Produced by appcert) contains a sample summary report from running appcert on a simple one-binary application (the sample program is used in this example).
The report header indicates which version of appcert generated the report; next, the name of the product being examined; the version of Solaris it was built on; and the version of Solaris it was checked against. This is followed by a summary of whether or not any potential binary stability problems were detected.
HTML versions of this summary and detailed reports are also generated, making it easy to go from summary report to detailed report.
The utility appcert can be used to quickly and easily divide a set of applications into those that have potential stability problems and those that do not. If appcert does report stability problems, the user needs to determine where the source of the problem is (sometimes it is due to static linking of a library, rather than to the application itself, in which case the solution is to dynamically link the library), and what type of problem it is. The following table lists a number of cases.
| Problem | Action |
| Use of private symbol is known to change | Eliminate use of symbol immediately |
| Use of private symbol that has not changed yet | Application can still run (for now); eliminate use of symbol when possible |
| Static linking of a library with a shared object | Use shared object instead |
| Use of private symbol for which no public equivalent is available | Contact Sun and request a public interface |
| Use of symbol that is deprecated or to be removed | Application can still be run (for now); eliminate use of symbol when possible |
| Use of public symbol that has changed (typically in an industry standard, for example, Motif) | Recompile |
Note that appcert may report things that may not be real problems.
Always use the latest version of appcert, which is available from http://docs.sun.com.
http://www.sun.com/developers/tools/abi/index.html
The following features were dropped in Solaris 8. This section does not cover features that were obsoleted in Solaris 8 to be removed in a future release. For a complete list of dropped features and hardware, refer to the End-of-Software Support Statements at http://docs.sun.com under the Solaris 8 Release Documents Collection.
The HotJava Browser is no longer supported.
The 1.0 version of the Java Native Interface (JNI 1.0) is no longer supported by the Solaris Java Development Kit version 1.2 (JDK 1.2).
Support in the Solaris Java Development Kit (JDK) for the 1.0 version of the Java Native Interface (JNI 1.0) has been removed. JNI 1.0 is also known as the Native Method Interface (NMI).
Solstice AdminSuite 2.3 software is no longer supported with the Solaris 8 operating environment. Any attempt to run Solstice AdminSuite 2.3 to configure Solstice AutoClients or diskless clients will result in a failure for which no patch is available or planned. While it may be possible to manually edit configuration files to enable diskless clients, such an operation is not recommended or supported.
F3 fonts and the TypeScaler rasterizer, Sun's proprietary scalable font technology, is no longer supported. Sun will continue to support the industry standard font formats Type1 and TrueType.
The XGL graphics API was declared obsolete in Solaris 7 and is no longer supported. XGL is being phased out in favor of the OpenGL industry standard. This will impact SunPHIGS applications since SunPHIGS is built on top of XGL.
paddr_tThe paddr_t data type found in sys/types.h is not supported in the 64-bit compilation environment. It is currently only available in the 32-bit compilation environment. It has been removed from all other compilation environments.
There are two sets of Application Programming Interfaces (APIs) that allow user accounting data to be accessed by applications. The preferred set of programming interfaces for accessing and manipulating user accounting information is described on the getutxent(3C) man page. These are both more capable and more portable than the older getutent(3C) routines.
Older applications may access the underlying accounting files directly. The files /var/adm/utmp and /var/adm/wtmp and the corresponding symbolic links /etc/utmp and /etc/wtmp are no longer supported. The format of the data contained in these files constrains the future evolution of the Solaris operating environment. Applications using these files should be updated to use the documented and supported APIs.
Applications that are already using the getutent(3C) family of routines may be unaffected on small system configurations. However, in future releases these interfaces may return errors when used on very large system configurations. For this reason, use the getutxent(3C) routines for both old and new code in place of the getutent(3C) APIs.
sysidnis System Identification Programsysidnis(1M) is no longer supported. sysidnis(1M) is the system identification program responsible for configuring name services during installation and upgrade, and after unconfiguration using sys-unconfig(1M).
sysidnis(1M) has been replaced by sysidns(1M).
The console subsystem for the Solaris operating environment running on an x86 (IA) based system has been replaced. The replacement is more compatible with the console subsystem for the Solaris operating environment running on a SPARC-based system and provides for future extensibility. This replacement has invalidated a large number of undocumented and unsupported interfaces, as well as some documented interfaces.
Documented interfaces:
pcmapkeys(1)
loadfont(1)
loadfont(4)
Undocumented and unsupported interfaces:
ioctls listed in /usr/include/sys/kd.h
ioctls listed in /usr/include/sys/vt.h
/dev/vt*
sysmem(3), asysmem(3)The sysmem and asysmem routines were declared obsolete in Solaris 2.5.1 and have been replaced by arguments to sysconf(3C). They were mistakenly published in the System V Interface Definition, Third Edition, (SVID).
nis_db(3N)The nis_db(3N) interface provided NIS+ database access functions and was declared obsolete in Solaris 2.6. It has now been removed in Solaris 8. The shared object libnisdb.so should not be used by any user application. The list of interfaces includes:
db_add_entry(3N)
db_checkpoint(3N)
db_create_table(3N)
db_first_entry(3N)
db_list_entries(3N)
db_remove_entry(3N)
db_standby(3N)
db_unload_table(3N)
db_table_exists(3N)
db_reset_next_entry(3N)
db_initialize(3N)
db_free_result(3N)
db_destroy_table(3N)
db_next_entry(3N)
The following interfaces have been removed since SPARCstation Voyager systems are no longer supported.
mic(7D)
pmc(7D)
contrast(1M)
mount -o f OptionThe -o f option has been removed from the ufs and udfs mount commands. The f option was used to execute a "fake" mount, which caused an entry to be written to /etc/mnttab, but no actual mount to occur (that is, the mount(2) system call is not executed).
The following list only covers dropped features. This list does not include features that were obsoleted in Solaris 7 to be removed some time in the future. For a complete list of dropped features and hardware, refer to the End-of-Software Support Statements at http://docs.sun.com under the Solaris 7 Release Documents Collection.
The following features were dropped in Solaris 2.6. This section does not cover features that were obsoleted in Solaris 2.6 to be removed in a future release. For a complete list of dropped features and hardware, refer to the End-of-Software Support Statements at http://docs.sun.com under the Solaris 2.6 Release Documents Collection.
Support for the dataless client system type is no longer available in Solaris 2.6. Customers currently using this system type are advised to convert existing dataless systems to the diskless, standalone, server, or Solstice AutoClient system type.
NeWSprint software is no longer available in Solaris 2.6.
The Motif Window Manager (MWM) is no longer supported in the Solaris 2.6 operating environment. If you are currently using the MWM, upgrade to CDE.
Support for F3 fonts and the TypeScaler rasterizer, Sun's proprietary scalable font technology, is no longer available in Solaris 2.6.
When an uppercase user name was typed at the login: prompt, login(1) assumed that the terminal was not capable of handling lowercase and set the terminal modes for uppercase only operation. Because this feature caused user confusion and supported only obsolete hardware, it is no longer available in Solaris 2.6.
- ssacli(1M) CommandThe ssacli(1M) command is no longer available in Solaris 2.6. Use the ssaadm(1M) command for SPARCstorage Array administrative management.
Direct Xlib is no longer available in Solaris 2.6.
Use the Sun Shared Memory Transport Extension (SUN_SME) with Standard Xlib for comparable Xlib performance. SUN_SME does not use Direct Graphics Access (DGA); therefore, it does not generate the overhead and limitations associated with using Direct Xlib. SUN_SME is supported on all SPARC platforms.
|
| ||||||||||||