UnixWare/OpenServer Development Kit -- Release Notes

These release notes contain:

Introduction to the UDK

The UnixWare/OpenServer Development Kit, or UDK, is the software development kit that accompanies the UnixWare 7® Release 7.1.1 product. The UDK gives you the ability to create a single binary that will run on all three of SCO's major operating system platforms: UnixWare 7, SCO OpenServer(TM) Release 5, and SCO UnixWare 2.1.X. The UDK tools themselves are supported for installation and use on UnixWare 7 Release 7.1.1 (UW7.1.1), SCO OpenServer Release 5.0.5 (OSR5.0.5), and SCO UnixWare 2.1.3 (UW2.1.3). Because the UnixWare 7 development tools are available on all of SCO's existing platforms, developers using those platforms can get access now to the advanced features provided by the UDK: C++ exception handling, 64-bit integers, support for Java(TM) native methods, and much more.

The UnixWare/OpenServer Development Kit is a set of tools, libraries, header files and other files. It can be thought of as having two basic sets of components: compile-time components, those files necessary when you are creating a binary; and run-time components, those files needed by the binary you created when it is loaded and run. The compile-time components are the tools, like the compiler, assembler, optimizer, linker, header files and libraries. Run-time components consist mostly of shared libraries, but also include certain configuration files and tools such as debuggers. Some of these files, like shared libraries, are needed at both compile and run-time. In fact, since the UDK tools are themselves binaries built by the UDK, all of the run-time components must be present on the system for the compile-time tools to work.

For a ``universal'' binary to be able to run on SCO OpenServer Release 5, or SCO UnixWare 2.1.3, the appropriate run-time components of the UDK must be installed on the target platform. These components provide a compatibility layer that allows the UDK binary to interact correctly with the native system. There are two such compatibility layers: the UDK Compatibility Module for SCO OpenServer and the UDK Compatibility Module for SCO UnixWare 2.1.3.

If you are interested in keeping up with the latest tools and information about developing software on or for SCO, we invite you to consider the SCO Global Developer Program. You can join at no cost, and enjoy the benefits of special developer discounts on software and services, access to prerelease software, and other advantages of membership in the SCO developer technical community. For more information, visit the Developer Programs web site.

Application compatibility

  UnixWare 7 UnixWare 2 OpenServer 5
applications developed with
this UDK on releases:
7.1.1 2.1.3 5.0.5
will run on releases: 7.1.1
7.1.0
7.0.1
2.1.3 5.0.5
5.0.4
5.0.2

What's new in this UDK release

The following components are new or updated in this UDK release:

For more information, see the ``UnixWare 7 Features'' topic in the UnixWare 7 documentation set.

Other components remain unchanged from the previous UDK release.

Product set contents

The UnixWare/OpenServer Development Kit (UDK) product media consists of one CD-ROM containing the UDK and the Java Development Kit for SCO Operating Systems (JDK).

If you are interested in using only the Java Development Kit, it may be licensed separately from the UnixWare/OpenServer Development Kit. For information on installing the Java Development Kit, see the Java Development Kit 1.1.7B for SCO Operating Systems Release Notes.

Package descriptions

The UnixWare/OpenServer Development Kit (UDK) product consists of the following packages. Note that some packages are not applicable to all platforms.

UDK Packages

Package Description Host Platforms
baseupd Base Operating System Compatibility Update (system header files) OSR5.0.5 and UW2.1.3
usoftint Software Packaging Tools UW7.1.1, UW2.1.3, OSR5.0.5
uccs UDK Optimizing C Compilation System OSR5.0.5 and UW2.1.3 (part of UW7.1.1 CoreOS set)
ucplus UDK C++ Compilation System UW7.1.1, UW2.1.3, OSR5.0.5
ustdcomps UDK C++ Standard Components (container classes and other useful classes and tools) UW7.1.1, UW2.1.3, OSR5.0.5
uedebug UDK Enhanced Debugger (command line and graphical debugger) UW2.1.3 (part of CoreOS set for UW7.1.1, part of OSRcompat for OSR5.0.x)
tcldev Tcl/Vtcl development (headers and libraries) UW7.1.1
xdevsys Graphics Development (X11R6.1 headers, libraries, examples, etc.) UW7.1.1, UW2.1.3, OSR5.0.5
mtfdev OSF Motif Development Kit (Motif 1.2.5 headers, libraries, etc.) UW7.1.1, UW2.1.3, OSR5.0.5
TEDdincl CDE Desktop Developers Include Files UW7.1.1
TEDddemos CDE Desktop Demos and Examples UW7.1.1
TEDdhelp CDE Desktop Help Development System UW7.1.1
TEDdappb CDE Desktop Application Builder UW7.1.1
TEDdman CDE Desktop Developer Manual Pages UW7.1.1
unmsdk Network Management SDK (headers and libraries) UW7.1.1, UW2.1.3, OSR5.0.5
jdk117 JDK 1.1.7B for SCO (base Java development kit) UW2.1.3; OSR5.0.5, OSR5.0.4, OSR5.0.2; UW7.1.0 (part of BaseWeb set for UW7.1.1)
jdk117pls JDK 1.1.7B for SCO (w/Docs, Demos and Debug versions) UW7.1.1, UW7.1.0; UW2.1.3; OSR5.0.5, OSR5.0.4, OSR5.0.2
jdkdoc JDK Online Documentation (integrated into UW7.1.1 SCOhelp) UW7.1.1, UW2.1.3
jdkman JDK Manual Pages (integrated into UW7.1.1 SCOhelp) UW7.1.1, UW2.1.3
scohelp SCOhelp Online Doc System (documentation reader) UW2.1.3 (part of CoreOS set for UW7.1.1)
UDKdoc UnixWare/OpenServer Developer Documentation UW7.1.1 and UW2.1.3 (also available via SCO's web site)
BASEman UnixWare Manual Pages UW2.1.3 and OSR5.0.5 (part of Documentation set for UW7.1.1)
udkman UDK Manual Page Reader UW2.1.3 and OSR5.0.5
OSRcompat UDK Compatibility Module for SCO OpenServer OSR5.0.2, OSR5.0.4, OSR5.0.5
UW2compat UDK Compatibility Module for SCO UnixWare 2.1.3 UW 2.1.3

 Package     Description                            Host Platforms
 -------------------------------------------------------------------------------
 baseupd     Base Operating System Compatibility    OSR5.0.5 and UW2.1.3
             Update (system header files)
 usoftint    Software Packaging Tools               UW7.1.1, UW2.1.3, OSR5.0.5
 uccs        UDK Optimizing C Compilation System    OSR5.0.5 and UW2.1.3 (part
                                                    of UW7.1.1 CoreOS set)
 ucplus      UDK C++ Compilation System             UW7.1.1, UW2.1.3, OSR5.0.5
 ustdcomps   UDK C++ Standard Components            UW7.1.1, UW2.1.3, OSR5.0.5
             (container classes and other useful
             classes and tools)
 uedebug     UDK Enhanced Debugger (command line    UW2.1.3 (part of CoreOS set
             and graphical debugger)                for UW7.1.1, part of OSRcompat
                                                    for OSR5.0.x)
 tcldev      Tcl/Vtcl development (headers and      UW7.1.1
             libraries)
 xdevsys     Graphics Development (X11R6.1          UW7.1.1, UW2.1.3, OSR5.0.5
             headers, libraries, examples, etc.)
 mtfdev      OSF Motif Development Kit (Motif       UW7.1.1, UW2.1.3, OSR5.0.5
             1.2.5 headers, libraries, etc.)
 TEDdincl    CDE Desktop Developers Include Files   UW7.1.1
 TEDddemos   CDE Desktop Demos and Examples         UW7.1.1
 TEDdhelp    CDE Desktop Help Development System    UW7.1.1
 TEDdappb    CDE Desktop Application Builder        UW7.1.1
 TEDdman     CDE Desktop Developer Manual Pages     UW7.1.1
 unmsdk      Network Management SDK (headers and    UW7.1.1, UW2.1.3, OSR5.0.5
             libraries)
 jdk117      JDK 1.1.7B for SCO (base Java          UW2.1.3; OSR5.0.5, OSR5.0.4,
             development kit)                       OSR5.0.2; UW7.1.0 (part of
                                                    BaseWeb set for UW7.1.1)
 jdk117pls   JDK 1.1.7B for SCO (w/Docs, Demos      UW7.1.1, UW7.1.0; UW2.1.3;
             and Debug versions)                    OSR5.0.5, OSR5.0.4, OSR5.0.2
 jdkdoc      JDK Online Documentation (integrated   UW7.1.1, UW2.1.3
             into UW7.1.1 SCOhelp)
 jdkman      JDK Manual Pages (integrated into      UW7.1.1, UW2.1.3
             UW7.1.1 SCOhelp)
 scohelp     SCOhelp Online Doc System              UW2.1.3 (part of CoreOS set
             (documentation reader)                 for UW7.1.1)
 UDKdoc      UnixWare/OpenServer Developer          UW7.1.1 and UW2.1.3 (also
             Documentation                          available via SCO's web
                                                    site)
 BASEman     UnixWare Manual Pages                  UW2.1.3 and OSR5.0.5 (part
                                                    of Documentation set for
                                                    UW7.1.1)
 udkman      UDK Manual Page Reader                 UW2.1.3 and OSR5.0.5
 OSRcompat   UDK Compatibility Module for SCO       OSR5.0.2, OSR5.0.4, OSR5.0.5
             OpenServer
 UW2compat   UDK Compatibility Module for SCO       UW 2.1.3
             UnixWare 2.1.3

Documentation

The UnixWare 7.1.1 documentation is available from:

To access the UDK documentation from any of these sources, select Software Development from the list of topics.

To access UnixWare 7 manual pages from the command line on SCO UnixWare 2.1.3 and SCO OpenServer systems, see ``UnixWare 7 manual pages on SCO OpenServer and SCO UnixWare Systems''.

See also:

UnixWare 7 manual pages on SCO OpenServer and SCO UnixWare Systems

When you install the UDK on SCO OpenServer or SCO UnixWare, the UnixWare 7 manual pages (BASEman) are loaded into a parallel manual page directory. Use udkman to view the UnixWare 7 manual pages, and continue to use man to view the SCO OpenServer or SCO UnixWare manual pages. The UDK compatibility modules must be installed before the udkman package.

Hardware compatibility

The most current information about SCO hardware support is available on the SCO Compatible Hardware Web Pages (CHWP). A static version of the CHWP for UnixWare 7.1.1 is available on the UDK CD (under info/hardware/chwp/chwp.htm)

Java Development Kit 1.1.7B documentation

The Java Development Kit (JDK) is a powerful development environment that is portable, object-oriented, platform independent, and especially well suited for developing Internet-enabled applications. The JDK includes the Java compiler, interpreter, classes, and documentation.

Documentation for the JDK 1.1.7B is contained in the jdk117pls package and, for UnixWare 7 only, also in the jdkdoc and jdkman packages. All of the documentation is in HTML format and may be viewed with any browser you have installed on your system. The documentation included in the jdk117pls package is not integrated into OpenServer SCOhelp or UnixWare 2 Dynatext Library graphical help systems. However, the documentation included in the jdkdoc and jdkman packages is integrated with SCOhelp on the UnixWare 7 platform.

Desktop Development Kit documentation

This component provides TriTeal® Enterprise Desktop development tools and documentation. They support the development of new TED® applications, and the integration of existing OSF/Motif®, OPEN LOOK®, and Indigo Magic® applications on the UnixWare 7 CDE desktop. Desktop development kit packages include:

Individual packages can be selected from the UDK installation screen.

These tools support development on the UnixWare 7 platform only; it is not a cross-platform development environment.

The Desktop Development Kit includes its own documentation, which is not included in the UnixWare 7.1.1 documentation set. Further TED development documentation is available from the TriTeal website.

Preparing for installation

Supported platforms

The UnixWare 7.1.1 UDK installs on:

System requirements

The following sections give the minimum disk requirements for fully installed UDK packages:

The unlabeled numbers are 512-byte blocks (1/2 of a kilobyte, which is 1024 bytes).


NOTE: If you use Java, you need at least 64MB RAM. If you want to run any sizeable Java applications, adjust your swap space accordingly.

UnixWare 7 Release 7.1.1

udk 202
usoftint 1244
ucplus 5009
ustdcomps 2764
tcldev 1813
xdevsys 8848
mtfdev 11404
TEDdincl 9404
TEDddemos 1544
TEDdhelp 5645
TEDdappb 19269
TEDdman 1951
unmsdk 452
jdk117pls 76509
jdkdoc 24771
jdkman 221
UDKdoc 31533
Total 202583 blocks (104Mb)

 udk         202
 usoftint    1244
 ucplus      5009
 ustdcomps   2764
 tcldev      1813
 xdevsys     8848
 mtfdev      11404
 TEDdincl    9404
 TEDddemos   1544
 TEDdhelp    5645
 TEDdappb    19269
 TEDdman     1951
 unmsdk      452
 jdk117pls   76509
 jdkdoc      24771
 jdkman      221
 UDKdoc      31533
 ---------------------------------
 Total       202583 blocks (104Mb)

SCO UnixWare 2.1.3

UW2compat 15593
baseupd 8946
usoftint 855
uccs 20580
ucplus 5010
ustdcomps 2764
uedebug 5261
mtfdev 11404
xdevsys 8847
unmsdk 452
scohelp 25479
UDKdoc 31533
BASEman 56832
udkman 106
jdk117 28135
jdk117pls 76509
Total 298306 blocks (153Mb)

 UW2compat   15593
 baseupd     8946
 usoftint    855
 uccs        20580
 ucplus      5010
 ustdcomps   2764
 uedebug     5261
 mtfdev      11404
 xdevsys     8847
 unmsdk      452
 scohelp     25479
 UDKdoc      31533
 BASEman     56832
 udkman      106
 jdk117      28135
 jdk117pls   76509
 ---------------------------------
 Total       298306 blocks (153Mb)

SCO OpenServer 5.0.5

baseupd 8128
usoftint 855
uccs 19286
ucplus 5010
ustdcomps 2764
mtfdev 11404
xdevsys 8847
unmsdk 452
BASEman 56832
udkman 106
OSRcompat 22274
jdk117 28135
jdk117pls 76509
Total 240596 blocks (123Mb)

 baseupd     8128
 usoftint    855
 uccs        19286
 ucplus      5010
 ustdcomps   2764
 mtfdev      11404
 xdevsys     8841
 unmsdk      452
 BASEman     56832
 udkman      106
 OSRcompat   22274
 jdk117      28135
 jdk117pls   76509
 ---------------------------------
 Total       240596 blocks (123Mb)

All UDK packages

udk 202
baseupd 8128
usoftint 1244
ucplus 5010
ustdcomps 2764
tcldev 2047
xdevsys 8847
mtfdev 11404
TEDdincl 9420
TEDddemos 1544
TEDdhelp 5645
TEDdappb 19269
TEDdman 1951
uedebug 5261
uccs 20580
unmsdk 452
jdk117 28135
jdk117pls 76509
jdkdoc 24771
jdkman 221
scohelp 25479
udkman 106
BASEman 56832
UDKdoc 31533
OSRcompat 22274
UW2compat 15593

 udk         202
 baseupd     8128
 usoftint    1244
 ucplus      5010
 ustdcomps   2764
 tcldev      2047
 xdevsys     8847
 mtfdev      11404
 TEDdincl    9402
 TEDddemos   1544
 TEDdhelp    5645
 TEDdappb    19269
 TEDdman     1951
 uedebug     5261
 uccs        20580
 unmsdk      452
 jdk117      28135
 jdk117pls   76509
 jdkdoc      24771
 jdkman      221
 scohelp     25479
 udkman      106
 BASEman     56832
 UDKdoc      31533
 OSRcompat   22274
 UW2compat   15593

Installing the UDK

The following sections provide instructions for installing the UDK on SCO UnixWare and SCO OpenServer as well as UnixWare 7 systems:

Installing the UDK along with the JDK

If you want to install the UDK along with the JDK, follow this procedure rather than the instructions in the JDK Release Notes.

  1. If you are installing the UDK on an SCO OpenServer or SCO UnixWare machine on which you have already installed the JDK, remove the existing jdk* packages.

  2. Follow the procedure for installing the UDK on the operating system (UnixWare 7, SCO OpenServer or SCO UnixWare) running on your machine.


NOTE: The jdk117 package is included on the updates CD, and can be deselected during the base system installation. If this package was not installed with the base system, or you have an older version of the jdk117 package, you must first install it from the updates CD in order to install or update the other Java tools. See the Java Development Kit Release Notes for more information.

Installing the UDK on a UnixWare 7 system

  1. Log in as root.

  2. Place the UDK CD in the CD drive if you have not already done so.

  3. You can use the pkgadd(1M) command to install with the distribution CD mounted or unmounted (you may have mounted the CD to read these Release Notes from the distribution media):

    The system displays the packages contained on the CD-ROM.

  4. Install the packages you need.

Note that if you install Release 7.1.1 and then install the UDK with either the tcldev or TEDdincl packages selected, you will see this message:

WARNING: UnixWare 7 Update 7.1.1 should be reapplied

You should then re-apply the update711 package from the Release 7.1.1 installation CD using pkgadd, as in this example:

pkgadd -d cdrom1 update711

A workaround is to make sure that neither the tcldev or TEDdincl packages are selected when you install the UDK (note that the TEDdappb, TEDddemos, TEDdhelp, and TEDdman packages require the TEDdincl package and so must also be de-selected). The above message will not appear and you will not need to re-apply Release 7.1.1.

Installing the JDK on a UnixWare 7 system


NOTE: The jdk117 package is included on the updates CD, and can be deselected during the base system installation. If this package was not installed with the base system, or you have an older version of the jdk117 package, you must first install it from the updates CD in order to install or update the other Java tools. See the Java Development Kit Release Notes for more information.

  1. Log in as root.

  2. Place the UDK CD in the CD drive if you have not already done so.

  3. You can use the pkgadd(1M) command to install with the distribution CD mounted or unmounted (you may have mounted the CD to read these Release Notes from the distribution media):
Note that you can also install this package by invoking the UDK install as shown above, and selecting only this package.

Installing the UDK on an SCO OpenServer system


NOTE: A script for installing the UDK on an SCO OpenServer system is available: OSRUDKInst.sh, provided on the UDK CD. This script will be adequate for most users. For more information on what this script does, see the description at the front of the script. If you choose not to use the script, follow the instructions below.

If any UDK packages already exist on the system, including any previous OSRcompat module, they must be removed before beginning the installation of the UDK.

  1. Log in as root.

  2. Place the UDK CD in the CD drive.

  3. Mount the UDK CD.

  4. Enter pkgadd -d mount_directory, where mount_directory is the mount point for the UDK CD.

    The system displays a list of packages that may be installed from the CD.

  5. Select the following packages in the order shown:
The only required package is OSRcompat, which should be installed first. If the ucplus package is desired, uccs should be installed first. If either uccs or ucplus is installed, baseupd should also be installed, and /udk/usr/ccs/bin should appear in your PATH before /bin. If either xdevsys or mtfdev is installed, /udk/usr/X/bin should appear in your PATH before /usr/bin/X11.

If you wish to install only the Java tools, run the script OSRUDKInst.sh and follow the instructions.

Other UDK packages on the CD should not be installed on SCO OpenServer.

All packages other than OSRcompat require SCO OpenServer Release 5.0.5 or later.

Installing the UDK on a SCO UnixWare 2.1.3 system


NOTE: If PTF4001 is installed on your UnixWare 2.1.3 system, it must be removed before installing the UDK. PTF4001 should then be reinstalled after UDK installation. If you later wish to remove the UDK, PTF4001 must be removed first. The UDK can then be removed, and PTF4001 should be reinstalled. Also note that, if the UnixWare 7.1.1.0 UDK already exists on the system, you cannot reinstall it without first removing PTF4001 and the UDK in the order described.

  1. Log in as owner.

  2. Place the UDK CD in the CD drive.

  3. Start the Application Installer.

  4. Select CD-ROM from the Install-From menu.

    The system displays the packages contained on the CD-ROM in the upper part of the window.

  5. Click on the icon for the UDK application set.

  6. Click on "Install".

The only required package is UW2compat, which requires UnixWare 2.1.3. If the ucplus package is desired, uccs should be installed first. If either uccs or ucplus is installed, baseupd should also be installed, and /udk/usr/ccs/bin should appear in your PATH before /usr/bin or /usr/ccs/bin. If either xdevsys or mtfdev is installed, /udk/usr/X/bin should appear in your PATH before /usr/X/bin or /usr/bin/X11.

If you wish to install only the Java tools, choose the following packages: UW2compat, jdk117, jdk117pls


NOTE: Certain UDK packages might not install during UDK set installation. This behavior has been observed with the jdk117, jdk117pls, and ucplus packages. When the UDK set installation is complete, use the pkginfo(1) command to verify that all desired packages were installed. If any are missing, use the pkgadd(1M) command to add the desired packages individually:

pkgadd -d cdrom1 package_name


Installing the compatibility modules

``Universal'' binaries developed on the UDK Release 7.1.1 will run on SCO OpenServer and SCO UnixWare platforms when the appropriate compatibility modules are installed:

To install a compatibility module, enter:

pkgadd -d / mount_directory compat_module_name


NOTE: You must remove any previous OSRcompat module from your SCO OpenServer system before installing the new version from the Release 7.1.1 UDK CD. To remove the older version, enter:

pkgrm OSRcompat


Usage notes

The UDK can be used to produce binaries that can be executed on UnixWare 7, SCO UnixWare 2.1.x, and SCO OpenServer 5.0.x systems. To take advantage of this capability, you must:

For details about which APIs are supported on all three platforms, refer to the Porting, Integration and Compatibility topic in the UnixWare 7 documentation set.

See the following sections for detailed usage notes:

libcudk70.a

If you are compiling an application using the Release 7.1.1 version of libc and the UDK, and you want your application to also run on Release 7.0.1, then you may need to include the following in your cc command line:

   -l cudk70

If you do not, then applications built with the Release 7.1.1 version of libc may not run on Release 7.0.1. This is because 81 symbols from the archive part of libc (listed in the table below) were moved into the shared part for Release 7.1.0.

To provide a way for users to create applications that use these symbols and run on all UnixWare 7 releases, an archive library (libcudk70.a), is provided which contains only the following symbols (moved from the archive to the shared part of libc since Release 7.1.0):

_adjtime adjtime
_async_daemon async_daemon
_dtop  
_ecvt ecvt
_exect exect
_exportfs exportfs
_fcvt fcvt
_fstat fstat
_fstat32 fstat32
_fstat64 fstat64
_fstatfs fstatfs
_gcvt gcvt
_getdents getdents
_gethz gethz
_gtty gtty
_iba_dtop  
_iba_ltostr  
_keyctl keyctl
_lstat lstat
_lstat32 lstat32
_lstat64 lstat64
_ltostr  
_mincore mincore
_nfs_getfh nfs_getfh
_nfssvc nfssvc
_nfssys  
_plock plock
_realpath realpath
_setegid setegid
_seteuid seteuid
_settimeofday settimeofday
_stat stat
_stat32 stat32
_stat64 stat64
_statfs statfs
_stty stty
_syscall syscall
_sysfs sysfs
_sysi86 sysi86
_ttyslot ttyslot
_uadmin uadmin
_utssys utssys
_vfork vfork

                         _adjtime        adjtime
                         _async_daemon   async_daemon
                         _dtop
                         _ecvt           ecvt
                         _exect          exect
                         _exportfs       exportfs
                         _fcvt           fcvt
                         _fstat          fstat
                         _fstat32        fstat32
                         _fstat64        fstat64
                         _fstatfs        fstatfs
                         _gcvt           gcvt
                         _getdents       getdents
                         _gethz          gethz
                         _gtty           gtty
                         _iba_dtop
                         _iba_ltostr
                         _keyctl         keyctl
                         _lstat          lstat
                         _lstat32        lstat32
                         _lstat64        lstat64
                         _ltostr
                         _mincore        mincore
                         _nfs_getfh      nfs_getfh
                         _nfssvc         nfssvc
                         _nfssys
                         _plock          plock
                         _realpath       realpath
                         _setegid        setegid
                         _seteuid        seteuid
                         _settimeofday   settimeofday
                         _stat           stat
                         _stat32         stat32
                         _stat64         stat64
                         _statfs         statfs
                         _stty           stty
                         _syscall        syscall
                         _sysfs          sysfs
                         _sysi86         sysi86
                         _ttyslot        ttyslot
                         _uadmin         uadmin
                         _utssys         utssys
                         _vfork          vfork

Note that the _stat and stat interfaces listed above are the versions of the stat system call that provide the older System V Release 3-style stat structure (before expanded fundamental types). Normally, the stat.h header file translates a call to stat(2) to xstat, which has always been in the shared part libc.

New applications compiled without -l cudk70 on Release 7.1.1 will no longer bind the symbols listed above into their own images and will, instead, expect to find them in the shared part of libc. Since the native versions of the shared part of libc on Release 7.0.1 do not contain the above symbols, such applications will not run on these systems. To permit Release 7.1.1 applications to run on UnixWare 7 Release 7.0.1, include the libcudk70.a library during the linking phase of compiling the application.

Here is an example:

   # start on a Release 7.1.1 system
   

# a simple test program; realpath() is one of the APIs that moved # from the static to the dynamic part of libc in Voyager UW701> cat rp.c

#include <stdlib.h> #include <sys/param.h> #include <stdio.h>

int main() { char p[MAXPATHLEN]; realpath(".", p); printf("%s\n", p); } # build on Release 7.1.1 in the usual way UW711> /usr/ccs/bin/cc rp.c

# run on Release 7.1.1 ... works great UW711> ./a.out /lfs/home1/jls/test

# now move executable to a Release 7.0.1 system UW711> rcp a.out UW701:test

# now we're on the Release 7.0.1 system

# try to run it here ... test fails UW701> ./a.out dynamic linker: ./a.out: symbol not found: realpath Killed

# get back to Release 7.1.1 system # and this time link program against special library UW711> cc rp.c -lcudk70

# executable still works on Release 7.1.1 UW711> ./a.out /lfs/home1/jls/test

# now move it to the Release 7.0.1 system again UW711> rcp a.out UW701:test

# and try it there ... this time it works UW701> ./a.out /home/jls/test

You can see what is happening here by looking for the realpath symbol in the a.outs. In the original build, realpath is unresolved:
   UW701> nm a.out | grep realpath
   [46]    | 134513700|      52|FUNC |GLOB |0    |UNDEF  |realpath
which works as long as realpath is found in libc.so.1, which happens on Release 7.1.1 but not on Release 7.0.1.

In the second build, realpath has been statically linked in from the libcudk70 archive:

   UW701> nm a.out | grep realpath
   [31]    |         0|       0|FILE |LOCL |0    |ABS    |realpath.c
   [53]    | 134515216|      36|FUNC |GLOB |0    |8      |realpath
   [63]    | 134515216|      36|FUNC |GLOB |0    |8      |_realpath
This executable can be run in environments where realpath is not in libc.so.1.

In upcoming releases, more UnixWare system libraries and APIs will be made available through shared objects. Existing application binaries will continue to work as they do today, but when relinked on these newer releases, it is possible that the application binaries produced will not run on older releases.

Similarly, shared libraries currently using non-PIC objects will also continue to run as they do today, and when relinked on a newer release, it is again possible to create shared libraries that will not run on older releases.

Generally, SCO will provide updated UDKs so that older releases can run these newer binaries and shared libraries, but it is not required that all systems be upgraded. Thus updates of libcudk70.a to enable building binaries and shared libraries that can run on older releases will most likely be provided as these APIs and libraries are made available through shared objects.

C Compiler and Linker

To create an executable or shared object, use the CC or cc command. If any input object files contain C++ code, you must use the CC command.

Invoking the Linker directly

ld should be invoked directly only if the -r option is used to create a relocatable object to be used in a later link.

libthread and fork(2)

UnixWare 7 provides two versions of the traditional fork(2) system call: fork1 and forkall. In a process with only one light-weight process (LWP), there is no difference between the two routines. In a process with multiple LWPs, fork1 will create a child process with only a single LWP, the LWP that invoked fork1; forkall will create a child process that has copies of all LWPs from the parent process. Until UnixWare 7.0.1, fork was a synonym for forkall. In UnixWare 7.0.1, a change was introduced for processes that link with libthread: fork became a synonym for fork1 instead of forkall. This was done to conform to the POSIX and X/Open definitions of fork in multithreaded applications. However, certain applications had grown to depend on the behavior of fork and broke when the change was introduced. (There was no change in behavior for processes that do not link with libthread). In this release, the original behavior of fork has been restored; it is now once again synonymous with forkall. Applications that link with libthread and want the POSIX and X/Open behavior for fork can invoke fork1 directly or define the global variable _thread_sys_behavior and assign 1 as its value:

int _thread_sys_behavior = 1;

Process tracing (LD_TRACE)

Process tracing allows you to see what functions your process is calling, while it is executing. To trace an executable, you can set the following environment variables:

LD_TRACE=[sym,tim,hitim,lib,ret]
LD_TRACE_FILENO=
fd
LD_TRACE_ARGNO=num
LD_TRACE_SCALE=num
LD_TRACE_STACK=funcname[,funcname...]
LD_TRACE_FRAMES=num


NOTE: The current version of library tracing does not work with programs that use libthread.

If LD_TRACE is set but doesn't contain any of the specified flags, you get a line for each function called:

sym(arg1, arg2, arg3) from hex_addr

You only see functions known to the dynamic linker; that is, no calls to static functions or functions defined in the same shared library as the caller and linked with the -Bsymbolic option to ld.

You can specify the number of arguments using LD_TRACE_ARGNO (default 3).

If a given library provides a table of functions and argument formats to the dynamic linker, then the dynamic linker will know the correct number of arguments and their formats (hex, decimal, unsigned, string, character, long long, float, double, long double). Varargs functions currently always print 3 hex args after the last fixed argument. Currently, only libc provides such a table.

If the sym flag is set, you get the symbol name instead of hex_addr. If the lib flag is set you get sym@lib and hex_addr@lib (or name@lib).

Symbolic names for the reference address can be wrong if the references come from symbols that have not been exported and so are not known to the dynamic linker. This is especially prevalent for references from a.outs. The dynamic linker picks the symbol from the same object that is closest to, but less than the reference address.

If tim is set you get:


	... at sec.usec

This uses gettimeofday; timing is not available until all shared library _init routines have been run.

If hitim is set, you get timing using the Pentium's high resolution rdtsc instruction. This will be either a raw value:


	... at ticks

or a scaled value, if you set LD_TRACE_SCALE. LD_TRACE_SCALE expects an integer representing the clock rate of your chip in mhz (e.g, 133 for a 133 mhz Pentium).


	... at sec.ticks

Caveats for the high resolution timer:

  1. You must be on a Pentium (or later).
  2. You must have set USER_RDTSC to non-zero using idtune and rebuilt/rebooted the kernel.
  3. Timings can be inacurrate for a multi-processor box, since we do not synch the processor timers.


NOTE: If caveats 1 or 2 are not met, you get a SIGSEGV if you set LD_TRACE=hitim. Access to rdtsc for user-level processes seems to be on by default in OpenServer.

If ret is set, you get another line per call:


	=> sym[@lib] returned hex_val

The return value format is also specified by the function format table, if present. No format is printed for functions that return structs.

Output goes to file descriptor 2 unless you set LD_TRACE_FILENO, in which case it goes to fd.

Finally, instead of the regular 1 per call trace, you can get a stack trace for every instance of a given call. Say you want to see a stack trace for every call to malloc and printf. LD_TRACE_STACK=malloc,printf

You can control the output using:
LD_TRACE=[sym,lib,ret,tim,hitim]
LD_TRACE_ARGNO=num
LD_TRACE_FILENO=num
LD_TRACE_FRAMES=num

The timings and return values are printed only for the top function in each stack (the one you asked to trace). sym and lib control the format of the output for the rest of the frames as well. The depth of the stack can be limited using LD_TRACE_FRAMES. A value of 0 (the default) means print the entire stack.

A caveat about stack traces: the algorithm used by this feature works in most cases; one exception is for functions that return structs. Tracing through signal handlers is also likely to be problematic.

Limitations


NOTE: See the Java Development Kit Release Notes concerning JDK limitations.

UDK binaries on SCO OpenServer

UDK-built binaries using the following components will not work on SCO OpenServer:

To produce binaries that work on all three operating systems, do not use any of the items on this list.

SCO OpenServer binaries and the OSRcompat package

The dynamic linker provided with the UDK sometimes fails to identify the target operating system of a binary (e.g., with binaries that have been run through some versions of GNU strip). If SCO OpenServer binaries that executed successfully before you installed the UDK fail to execute, use the elfmark -t osr5 command to positively identify them as SCO OpenServer binaries.

Debugger

The graphical interface to debug will occasionally produce the following message: message pops up:

   Invalid operation on running object p??
This just indicates that your previous request from the GUI for that particular object (process) has not completed as yet and your current request has been ignored. This may occur when stepping through the source code very quickly, when the current machine is slow or the machine's system resources are under a heavy load.

The solution is to try again after a small pause.

In UnixWare 7 the online help for the graphical debugger is linked to the online documentation library for UnixWare 7. Therefore, the debugger online help does not work on SCO OpenServer systems.

C++ Standard Library

Most of the new C++ Standard Library is not in UnixWare 7. This includes:

The C Standard Library is still present in the global namespace.

libftp

Contrary to what is stated in the topic ``Porting, integration and compatibility'' in the UnixWare 7 documentation set, applications linked against the UnixWare 7 FTP library (libftp) may be run on both OpenServer 5 and UnixWare 2.1.X systems provided that the appropriate compatibility module has been installed.

link(2), rename(2), and symlink(2)

Some system administration scripts and other programs, which run with root privilege, create temporary files with potentially predictable names in public directories such as /tmp. In previous releases of UnixWare 7, it was possible for ordinary users to render a system unusable by linking protected files onto the names used by the programs. To guard against this type of attack, restrictions have been placed on the following system calls in Release 7.1.1:

System call Restriction
link(2) If the ``sticky bit'' (see chmod(2) is set on the directory in which the link is being created, either the directory or the object being linked from must be owned by the calling user ID.
rename(2) If the sticky bit is set on the destination directory, the object being renamed cannot be a symbolic link, and either the directory or the object being renamed must be owned by the calling user ID. If the destination name refers to an exiting file, either this file or the destination directory must be owned by the calling user ID.
symlink(2) If the sticky bit is set on the directory in which the link is being created, the directory must be owned by the calling user ID.

 -----------------------------------------------------------------------
| System call |  Restriction                                           |
|-------------|--------------------------------------------------------|
| link(2)     |  If the ``sticky bit'' (see chmod(2) is set on the     |
|             |  directory in which the link is being created, either  |
|             |  the directory or the object being linked from must be |
|             |  owned by the calling user ID.                         |
|-------------|--------------------------------------------------------|
| rename(2)   |  If the sticky bit is set on the destination directory,|
|             |  the object being renamed cannot be a symbolic link,   |
|             |  and either the directory or the object being renamed  |
|             |  must be owned by the calling user ID. If the          |
|             |  destination name refers to an exiting file, either    |
|             |  this file or the destination directory must be owned  |
|             |  by the calling user ID.                               |
|-------------|--------------------------------------------------------|
| symlink(2)  |  If the sticky bit is set on the directory in which the|
|             |  link is being created, the directory must be owned by |
|             |  the calling user ID.                                  |
|-------------|--------------------------------------------------------|

If the stated conditions are not met, the system call will fail with the error EPERM (Not privileged) set in errno. The P_OWNER privilege is required to override this restriction.

These restrictions are also apparent in the behavior of the ln(1) and mv(1) commands, which use these system calls, when used with the memfs, sfs, s5 and vxfs filesystem types on a Release 7.1.1 system.

Sockets

Release 7.1.1 of UnixWare 7 includes in-kernel sockets in which the socket routines used with the Internet (AF_INET and AF_INET6) and UNIX domain (AF_UNIX) families have been implemented as individual system calls. Previous releases of UnixWare implemented sockets as library calls, each of which might need to invoke many system calls to perform its function. The new in-kernel sockets implementation greatly enhances the performance of networking commands and services that use sockets by reducing the system overhead due to context switching. Other benefits include:

The define constant __OLD_SOCKET__ requests that the previous version of UnixWare 7 sockets be used, if available, instead of the in-kernel socket subsystem that is included in Release 7.1.1. Socket applications compiled on a Release 7.1.1 system will work on earlier releases of UnixWare 7 provided that PTF7401 has been installed on that system, or the application has been compiled with -D__OLD_SOCKET__ specified.

On a Release 7.1.1 system, the behavior of the sockets subsystem is controlled by the following parameters to inconfig(1Mtcp):

ss_connafunixndelay
Determines how a non-blocking connect(3sock) on a UNIX domain (AF_UNIX) socket will behave.

If set to 0 (default), connect returns -1 and sets EINPROGRESS in errno. However, the connection request is not aborted, and the connection is established asynchronously. Subsequent connect calls to the socket will fail if a connection has not yet been set up, and will return EALREADY in errno.

If set to 1, connect returns 0 and does not set a value in errno. The connection will complete synchronously and without appreciable delay. This ensures compatibility for applications which have been developed on operating systems where EINPROGRESS is not set. LI "ss_selectrdband" Determines how select(3C) will behave when a socket, for which an exception descriptor set has been defined, is shut down or closed for read operations. If set to 0 (default), exception bits are not set. If set to 1, exception bits are set.

ss_uw7_compat
The value of this parameter controls the system-wide default behavior of how newly created sockets handle asynchronous errors and events:

0
Sockets created by all binaries exhibit new behavior.

1 (default)
Sockets created by binaries that have been compiled on a Release 7.1.1 or later system exhibit new behavior. Sockets created by older binaries behave as in previous releases.

2
Sockets created by all binaries behave as in previous releases.

The SI_U7COMPAT ioctl command, described below, controls the behavior of individual sockets.

The behavior of sockets when handling asynchronous events and errors was changed in Release 7.1.1. Compatibility with behavior in earlier releases of UnixWare 7 may be obtained using the SI_U7COMPAT ioctl(2) command on an individual socket file descriptor:

   #include <sys/sockmod.h>
   ...
   int err, fd, x;
   ...
   /* Create a socket */
   fd = socket(domain, type, protocol);
   ...
   /* Select new behavior */
   x = 0;
   err = ioctl(fd, SI_UW7COMPAT, &x);
   ...
   /* Select old behavior */
   x = 1;
   err = ioctl(fd, SI_UW7COMPAT, &x);
In the above examples, the value passed in by the argument x controls the behavior of the socket as follows:

0
Select new behavior:

  • For read(2), recv(3sock), recvmsg(3sock), and recvfrom(3sock), an asynchronous error causes the function to return with an error without reading any data.

  • For write(2), send(3sock), sendmsg(3sock), and sendto(3sock), an asynchronous error causes the function to return with an error without writing any data.

  • For poll(2), an asynchronous error causes POLLERR to be set in the revent member of the file descriptor's pollfd structure.

  • For select(3C), an asynchronous error causes an exception to be set in the exceptfds fd_set that corresponds to the file descriptor.

1
Select old behavior:

  • connect(3sock) blocks all signals except SIGHUP, SIGINT, SIGQUIT, and SIGTERM.

  • connect(3sock) always returns EINPROGRESS when first called to establish an asynchronous connection.

  • If data received by a connectionless socket is not for the connected address, getsockopt(3sock) can retrieve EINVAL set for SO_ERROR. Other operations may set the asynchronous error returned by SO_ERROR.

Default socket behavior is controlled by the value of the inconfig(1Mtcp) ss_uw7_compat parameter.

The in-kernel sockets implementation in Release 7.1.1 is closer in behavior to BSD 4.3 sockets than was the sockets implementation in previous releases of UnixWare. The tables below update the tables given in ``Moving sockets applications to UnixWare 7'' in the online documentation.

Connection-mode primitives

BSD 4.3 UnixWare 7
If connect is called on an unbound socket, the protocol determines whether or not the endpoint will be bound before the connection takes place When connect is called on an unbound socket, that socket is always bound to an address selected by the transport provider

 BSD 4.3                     UnixWare 7
 If connect is called on     When connect is called on
 an unbound socket, the      an unbound socket, that
 protocol determines         socket is always bound to
 whether or not the          an address selected by
 endpoint will be bound      the transport provider
 before the connection
 takes place

Data transfer primitives

BSD 4.3 UnixWare 7
If the MSG_PEEK flag has been set when sendmsg is called, and access rights are available, the access rights will be copied, leaving them available for reading by a subsequent call to recvmsg If the MSG_PEEK flag is specified in a call to recvmsg, and access rights are available, the access rights will be transferred to the user buffer associated with the receiving socket. They are then destroyed, and the transferring socket has no further access to them. They are therefore unavailable to a subsequent call to recvmsg. Any data associated with the access rights will also be copied to the user buffer and will not be available to recvmsg

 BSD 4.3                     UnixWare 7
 If the MSG_PEEK flag has    If the MSG_PEEK flag is
 been set when sendmsg is    specified in a call to
 called, and access rights   recvmsg, and access
 are available, the access   rights are available, the
 rights will be copied,      access rights will be
 leaving them available      transferred to the user
 for reading by a            buffer associated with
 subsequent call to          the receiving socket.
 recvmsg                     They are then destroyed,
                             and the transferring
                             socket has no further
                             access to them.  They are
                             therefore unavailable to
                             a subsequent call to
                             recvmsg.  Any data
                             associated with the
                             access rights will also
                             be copied to the user
                             buffer and will not be
                             available to recvmsg

Information primitives

BSD 4.3 UnixWare 7
The SIOCSPGRP and FIOSETOWN commands for the ioctl(2) system call and the F_SETOWN command for the fcntl(2) system call take as arguments a positive process id or a negative process group id that identifies the intended recipient list of subsequent SIGURG and SIGIO signals The only acceptable arguments to ioctl(2) and fcntl(2) are the caller's process id or a negative process group id which has the same absolute value as the caller's process id. In other words, the calling process is the only recipient of SIGURG and SIGIO signals

 BSD 4.3                     UnixWare 7
 The SIOCSPGRP and           The only acceptable
 FIOSETOWN commands for      arguments to ioctl(2) and
 the ioctl(2) system call    fcntl(2) are the caller's
 and the F_SETOWN command    process id or a negative
 for the fcntl(2) system     process group id which
 call take as arguments a    has the same absolute
 positive process id or a    value as the caller's
 negative process group id   process id.  In other
 that identifies the         words, the calling
 intended recipient list     process is the only
 of subsequent SIGURG and    recipient of SIGURG and
 SIGIO signals               SIGIO signals

Local management

BSD 4.3 UnixWare 7
setsockopt can be used at any time during the life of a socket. Because of the state diagram specified by the Transport Provider Interface (TPI), a setsockopt operation on a transport provider conforming to this specification will fail if issued on a socket that is not bound to a local address. Specifically, if a socket is unbound and setsockopt is used, then the operation will succeed in the AF_INET domain, but will fail in the AF_UNIX domain

 BSD 4.3                     UnixWare 7
 setsockopt can be used at   Because of the state
 any time during the life    diagram specified by the
 of a socket.                Transport Provider
                             Interface (TPI), a
                             setsockopt operation on a
                             transport provider
                             conforming to this
                             specification will fail
                             if issued on a socket
                             that is not bound to a
                             local address.
                             Specifically, if a socket
                             is unbound and setsockopt
                             is used, then the
                             operation will succeed in
                             the AF_INET domain, but
                             will fail in the AF_UNIX
                             domain

Signals

BSD 4.3 UnixWare 7
SIGIO is delivered every time new data is appended to the socket input queue SIGIO is delivered only when data is appended to a socket queue that was previously empty
A SIGURG is delivered every time new data is anticipated or actually arrives A SUGURG is delivered only when there is no urgent data already pending

 BSD 4.3                     UnixWare 7
 SIGIO is delivered every    SIGIO is delivered only
 time new data is appended   when data is appended to
 to the socket input queue   a socket queue that was
                             previously empty
 A SIGURG is delivered       A SUGURG is delivered
 every time new data is      only when there is no
 anticipated or actually     urgent data already
 arrives                     pending

Miscellaneous

BSD 4.3 UnixWare 7
If ls -l is executed on a directory that contains a UNIX domain socket, an ``s'' will be printed on the left side of the mode field If ls -l is executed on a directory that contains a UNIX domain socket, a ``p'' will be printed on the left side of the mode field
Executing ls -F will cause an equals sign (=) to be printed after any filename that represents a UNIX domain socket Nothing will be printed after a filename that represents a UNIX domain socket

 BSD 4.3                     UnixWare 7
 If ls -l is executed on a   If ls -l is executed on a
 directory that contains a   directory that contains a
 UNIX domain socket, an      UNIX domain socket, a
 ``s'' will be printed on    ``p'' will be printed on
 the left side of the mode   the left side of the mode
 field                       field
 Executing ls -F will        Nothing will be printed
 cause an equals sign (=)    after a filename that
 to be printed after any     represents a UNIX domain
 filename that represents    socket
 a UNIX domain socket

Profiling and libthread

Programs built for profiling (with cc -p) that use libthread will not work correctly.

Java files and file(1)

file(1) does not correctly recognize Java .class files. If you want to have file(1) correctly identify these files, add the following line to /etc/magic:

   0       long    0xbebafeca      uxcore:999      Java Class File
(The fields in this line must be tab separated.)

SCOhelp on SCO UnixWare 2.1.3

The SCOhelp window appears slightly different on SCO UnixWare 2.1.3 than on UnixWare 7. Running /usr/X/bin/scohelp on UnixWare 2.1.3, the button bar is the standard Netscape button bar, not the SCO-specific button bar, and the icon at upper right is the Netscape icon, not the SCO icon. All other SCOhelp functionality remains the same on SCO UnixWare 2.1.3 as it is on UnixWare 7.

The SCOhelp server on UnixWare 2.1.3 may fail to start because of a permissions problem with the directory /usr/ns-home/httpd-scohelphttp/logs. The symptom of this failure is that /usr/X/bin/scohelp will start, but will fail to reach the SCOhelp server, returning an error. The workaround is to enter the following commands:

su root
chmod 777 /usr/ns-home/httpd-scohelphttp/logs
/usr/ns-home/httpd-scohelphttp/start

The last command starts the SCOhelp server.

PTFs on SCO UnixWare 2.1.3

When the UW2compat package is installed, it overwrites some of the native dynamic libraries (for example, /usr/lib/libsocket.so.1). If any of these libraries are later overwritten, for example by installing PTF3280, the new version of the library is not compatible with the UDK. This is not an issue on SCO OpenServer, as the OSRcompat package installs its libraries under /udk.

Graphics on SCO UnixWare 2.1.3

After installing the UW2compat package on SCO UnixWare 2.1.3, certain SCO UnixWare desktop administrative commands may fail when invoked by double clicking on their icons in the desktop. This problem can be resolved by restoring a filesystem symbolic link changed by the UW2compat package. Execute the following two commands as root:

rm /usr/lib/X11
ln -s /usr/X/lib /usr/lib/X11


NOTE: Some programs compiled using the UDK that use the X11R6 graphic libraries may not find app-defaults files in /usr/lib/X11 after restoring this link. These files may be safely moved to /usr/X/lib/app-defaults, as long as they do not overlap with existing files in that directory.

svc_fdset warning

When installing the Release 7.1.1 UW2compat package on UnixWare 2.1.3, you may see several warning: copy relocation size mismatch for symbol svc_fdset messages on system startup. These messages can safely be ignored.


© 2000 The Santa Cruz Operation, Inc. All rights reserved.