Title: Best%20Practices%20in%20Upgrading%20to%20OpenServer%206%20for%20Developers
1Best Practices in Upgrading toOpenServer 6 for
Developers
- Richard Harry John Wolfe
- Director, UNIX Engineering Senior Software
Engineer
2Agenda
- In this session we will cover
- The structure of SCO OpenServer 6 and its Devsys
- How to single certify applications for it
- How to modernize OpenServer 5 applications for it
- How to build New to SCO applications for it
- Features of the OpenServer 6 (and UW7) Devsys
- debug for Dbx or GDB users
- Finding memory leaks with memtool
- Resources for developers
3- Not covered in this session
- Hardware configuration ISL issues
- May 31, 2006 Webinar Running Third Party
Applications on OpenServer 6 - User account, email networking configuration
- June 14, 2006 Webinar - Best Practices in
Upgrading to OpenServer 6 for Systems
Administrators
4Structure OpenServer 6 and Development System
5Goals of OpenServer 6
- A modernization release of SCO OpenServer 5
- adds kernel threads
- adds user-space POSIX threads library
- adds asynchronous I/O
- adds LFS large file systems for files gt 2 GB
- better performance, reliability, scalability
- adds Java 1.4.x and Java 1.5.0 (in progress)
- enables threads-dependent apps
- Apache 2, MySQL, KDE desktop, etc.
- user interfaces still the same as SCO OpenServer!
- install, desktop, sys admin, commands, etc.
6How OpenServer 6 is Structured
One OpenServer 6 User Experience Install,
desktop, sys admin, commands
Legacy Apps
Modern Apps
SVR5/ UDK ABI
OSR ABI
OpenServer 6 dev tools /osr5/usr/ccs/bin/
OpenServer 6 dev tools /usr/ccs/bin/
OSR System Libs /osr5/usr/lib/
SVR5/UDK System Libs /usr/lib/
One OpenServer 6 Kernel
OSR5 sys calls
SVR5 sys calls
7Development Tools Options on OpenServer 6
- OpenServer 6 Dev Sys for SVR5 (UDK) ABI
- OpenServer 6 dev sys using -K udk option
- or - /usr/bin/cc which defaults to K udk
- use for single certification on UnixWare 7 and
OpenServer 6 - use for modernizing existing OSR5 apps
- use for device driver development (IHVs)
- used to relink the OpenServer SVR5 kernel
- provides access to NEW features
- threads and LFS (gt 2 Gbyte files)
8Development Tools Options on OpenServer 6
- OpenServer 6 Dev Sys for OSR ABI
- OpenServer 6 dev sys using -K osr option
- or /osr5/usr/bin/cc which defaults to K osr
- set PATH environment variable with /osr5/usr/bin
before /bin, /usr/bin or /usr/ccs/bin - use for binary compatibility to legacy OSR5 apps
- provides more modern C and C compilers
- Standards Conformance (almost) C and C
- same level of code generation and optimization as
in the SVR5/UDK compilers - 64-bit long long
9So exactly what is an ABI?
- What an app looks like at the binary level
- Content and layout of information that it
presents to system loaders and linkers (object
file format) - How different modules of an app communicate
- Function call conventions
- Size and layout of basic data types
- Size and layout of compound data types -
structures, unions, bit-fields - How an app communicates with the system
- Pathnames, sys call numbers, errnos, ioctls
- Size and layout of basic and aggregate system
data types
10Mixing OSR and UDK ABI Object Files ... No!
- No safe way to link OSR5 ABI and SVR5/UDK ABI
relocatable or shared objects (.o/.a/.so) - No way to intercept different system data types
- No way to intercept different bit-field layouts
and function calling conventions - No way to intercept system calls from objects
- Linker will reject mixture of objects, by default
- Force link mode provided - I know what Im
doing - But you probably dont
- Not recommended
11Want new features but need compatibility with old
OSR5 library?
- If your own, recompile
- If from another ISV, get vendor to provide new,
UDK-ABI-built libraries - If neither possible ...
- make app into 2 processes
- one process calls old lib
- compile -Kosr
- one process uses new features
- compile -Kudk
- use socket, pipe, IPC, etc. to communicate
between
12Single Certification
13Single Certification for UW7 and OSR6
- Major advantages for ISVs
- one build environment
- one binary distribution
- one platform for full test cycle
- two platforms it can run on
- two markets it can sell to
- SVR5 (UDK) is the vehicle
- What are the Dos and Donts?
14Single Certification Platforms
- Supported now
- Develop on UnixWare 7.1.x, run on OpenServer 6
- Supported in VERY-NEAR future
- Develop on OpenServer 6, run on UnixWare 7.1.4 mp
4 - Xserver (X.org) and graphics (GWXlibs) from
OpenServer 6 are being added UW7.1.4 MP4
15Single Certification Testing Guidance
- Really only need to test once?
- Do full certification testing on one platform
- Do sanity checks/touch testing on the other
platform - treat similarly to re-testing product on a new
minor point release of an OS - we expect it to work
- if it doesnt, its a bug and well fix it!
- First time you do this, do some extra testing on
the second platform
16Single certification guidance
- General rules
- link apps dynamically not statically
- use threads, LFS, networking, graphics, audio,
almost all other APIs! - avoid certain auditing/security/admin/job control
APIs - use C, C, Java, or assembly
- use APIs to get system information
- dont read and parse /etc and /var files directly
- use pkgadd format
- use shells and commands that behave same
- or use non-native shell/commands on one
platform
17Single certification guidance
- APIs
- all useful APIs from normal applications, work
- Thousands!
- Authentication APIs
- Use the SVR5 (UW7) libiaf APIs
- - Available and working in MP2
18Single certification guidance
- Commands
- shells are somewhat different across the ABIs
- e.g. OSR5 sh doesnt support symbolic signal
names - Use /u95/bin/sh instead of /bin/sh
- now will get consistent behavior across UW7, OSR6
- Use uname to determine which platform on
- Use /udk/bin and /u95/bin on OSR6 to find
commands with same behavior as UW7 - Prefix your PATH setting with these
19Single certification guidance
- System directory structure and file differences
- Apps should not read and parse /etc and /vars
configuration files directly - Apps should use APIs instead
- example reading /etc/inet/hosts works on UW7
but not on OSR6 where that file doesnt exist - call gethostent() etc., works on both UW7 and
OSR6 - This is good portability practice anyway!
- Device names should be configurable
- dont hard-code inside application
- many UW7 ones are present in OSR6 anyway
- e.g. /dev/tty00s, tty01s, etc. for serial lines
20Single certification guidance
- Packaging
- Packages should install into /opt or /var
- with two-ABI world, installing into /usr is
ill-advised - Use pkgadd technology if using SCO packaging
tools - available on both UW7 and OSR6
- custom is only on OSR6
- Some ISVs have their own install technology
- GUI-driven install wizards
- simple tarballs
21Single Certification for Drivers
- UnixWare 7 device drivers work on OpenServer 6
- Its the same SVR5 kernel technology
- IHV Single Certification between UnixWare 7 and
OpenServer 6 (either direction) is easy and
problem-free
22Modernizing OpenServer 5 Applications
23Guidance on modernizing existing apps C
- Existing OSR5 DevSys C compiler is old!
- ATT Cfront-based, c. 1992, buggy
- predates 1998 ISO language, library standards
- large-scale changes in language since then
- If your sources were developed with it
- expect they will not compile cleanly now
- source fix-ups are usually straightforward
- youre doing your code a favor!
- For bad cases try the CC -Xo option
- old library classes will all still be there
24Guidance on modernizing existing apps Threads
- Must modify to use threads
- pthreads API more standard than SVR4/UI threads
- use -Kudk to recompile application
- use -Kpthread when compiling threaded code
- fixes some things like global errno automatically
- Existing OSR5 source may not be thread-safe!
- May use non-reentrant functions such as strtok()
- use strtok_r() replacements when available
- May store application data globally
- May return pointers to static data
- Must study your code
25Guidance on modernizing existing apps Large
files
- Go forward with Large File Summit (LFS) APIs
- use -Kudk to recompile application
- create files up to one terabyte in size
- can use size-specific interfaces
- fopen64, lseek64, etc.
- or, can use regular fopen, lseek, etc.
- cc -D_FILE_OFFSET_BITS64
- must use vxfs filesystem and create filesystem
with largefiles flag - mkfs or fsadm_vxfs to turn on/off
- ulimit must be set to unlimited
26Guidance on modernizing existing apps
Fundamental system types
- Be careful with expanded fundamental system types
(EFT) - Size change between OSR5 and OSR6 in UDK mode
- mode_t, dev_t, uid_t, gid_t, nlink_t, pid_t,
ino_t, sigset_t - typically size goes from 16 bits to 32 bits
- system or app structs containing them also
change size - e.g. struct stat contains both dev_t and ino_t
- dev_t also changes how major, minor numbers
packed - all consequences of SVR5 infusion into OpenServer
6 kernel - Change should be transparent unless your code has
assumptions about size
27Building Legacy OpenServer Applications
- When is OSR ABI needed?
- when linking with existing OSR5 .o/.a/.so objects
- Use OSR ABI compilers
- same as UDK but with -K osr for OSR ABI
- modern, reliable, standard, optimizing
- 64-bit long long integer available
- LFS, threads, asynch I/O, EFT not available
- can accept OSR5 COFF objects as input to linker
- but cannot generate COFF
- can link with existing OSR5 C .o/.a/.so objects
- but cannot link with existing OSR5 C objects
- use CC -Xo to compile very old OSR5 C sources
28Building New to SCO Applications
29New to SCO Applications
- I dont care about single certification with UW7
and I dont have legacy OSR5 objects which
OpenServer 6 ABI should I use? - The UDK one!
- The SRV5/UDK ABI is SCOs one forward-going ABI.
30Porting New to SCO Applications
- Its not hard!
- Can use gmake even with UDK
- Good preprocessor starting points
- -DSVR4, -DSOLARIS, -DSOLARIS2
- If UDK, certain command option choices
- http//www.sco.com/developers/migration/osr5-uw7_
whitepaper.html
31Features of the OpenServer 6 and UnixWare 7
Development Systems
32Features of the OpenServer 6 Dev Sys
- C Compilation System
- C Compilation System
- C/C Debugger
- memtool
- fur
- Java 2 Standard Edition v. 1.4.2
- Except where noted, features apply to Dev Sys
used for both SVR5/UDK and OSR ABIs and to UDK on
UW7 - A major upgrade compared to existing (and
outdated) OSR5 Development System product!!
33The OpenServer 6 -K mode switch
- Compilers
- /usr/ccs/bin/cc defaults to -Kudk
- /osr5/usr/ccs/bin/cc defaults to -Kosr
- cross-ABI compiles are allowed
- /usr/ccs/bin/cc -Kosr ...
- /osr5/usr/ccs/bin/cc -Kudk
- ditto CC for C compiles as ld also
- Use cc or CC to do linking links against
correct ABI startup routines. - Other Dev Sys commands
- have -K osr udk option if necessary (e.g. lint)
- dont have option if irrelevant (e.g. lex and
yacc)
34OpenServer 6 C Compiler
- Robust compiler, excellent IA-32 code generation
- Standards-conforming libraries and headers
- Profiled versions of libraries
- prof, lprof in both ABIs
- fprof SRV5/UDK ABI only
- Standard set of command line tools, fully
internationalized - Conformance checking (-Xc) is against C 90
standard - Support for Java native methods SVR5/UDK ABI
only
- Almost all of C 99 - ISO/IEC 98991999
- inline, restrict, variable argument macro
functions, 60 other features - Only things missing
- variable-length arrays
- complex and imaginary numbers
- minor variances in snprintf(3S)
- some new C99 library functions and headers may
be SVR5/UDK ABI only - Option Xb will disable inline and restrict
keywords -
35OpenServer 6 C Compiler
- Accurate, robust implementation
- Almost all of the C standard - ISO/IEC
148821998 - except rarely-used export keyword, placement
delete, function-try-blocks, two-phase template
name binding, multi-byte characters in source
code, partial specialization of a class member
template
- Complete C Std Library
- STL, iostreams, string, locale, numerics, etc.
- fast and thread-safe
- Excellent IA-32 code generation
- Exception Handling - high
- performance
- Device driver support
- Thread safety SVR5/UDK ABI only
- Support for Java native methods SVR5/UDK ABI
only
36OpenServer 6 Debugger
- Graphical user interface
- Command line interface
- powerful, shell-like command language
- command history, command aliases
- Strong C and C symbolic debugging
- Step through inline functions, header code,
exceptions - Controls multi-process, multi-threaded apps
- follow forks in both parent and children
processes - Understands ELF/COFF, DWARF I/II executables
37memtool - Catching Dynamic Memory Errors
- SVR5/UDK ABI only
- Diagnose dynamic memory allocation errors
- writing beyond a block of memory
- using deallocated blocks
- memory leaks
- bad arguments passed to C malloc or C new
- Does not catch general pointer misuses or writing
outside local or global arrays - Runs the application under the hidden control of
the debugger and the dynamic C library malloc
runtime checking
38memtool (contd)
- Diagnostic includes one to three stack traces
- when detected
- when (de)allocated
- previous use (for realloc or free)
- Erroneously modified block diagnostics include an
annotated memory dump snapshot for the block - Each diagnostic comes with an explanation
short, medium, or long (user settable) - Application need not be rebuilt or relinked
- debugging (-g flag) provides much better info
39fur - FUnction Relocation
- Instruments and reorders code in relocatable
objects - at code block level - changes function order - locality of reference
- reorder code blocks - improves branch prediction
- move low-usage code to pseudo functions
- Profile guided optimization without recompilation
- Actual uses
- Has been used to optimize SCO kernels and
libraries - OEMs used fur to gain 15 improvement in Oracle
DB server - TPCC benchmarks - Will be used for Java virtual machine, Mozilla
browser
40Other OpenServer 6 Dev Sys components
- C Standard Components SVR5/UDK ABI only
- X11R6 Development Kit
- Motif Development Kit
- CDE Development Kit UW7 UDK only
- Network Management Development Kit
- TCL Development Kit
- Software Installation Tools
- Documentation
- DocView, man pages
- available at http//www.sco.com/support/docs
41Java 2 Standard Edition - version 1.4.2
- a/k/a
- Java Software Development Kit (SDK, JDK)
- Java Runtime Environment (JRE)
- Single binary package built with UDK for use on
both UnixWare 7 and OpenServer 6 - Example of SCO-internal single certification!
- Makes for ISV Java app single certification
- Must use UDK ABI for any C/C native methods
42Whats in J2SE 1.4.2?
- Runtime pieces
- HotSpot Java Virtual Machine
- real native threads on both UW7 and OpenServer 6
- HotSpot dynamic compilers
- client
- server
- appletviewer
- basic API libraries
- lang, util, math, io
- applet, AWT, image, audio, media
- net, zip, security
- RMI, Java Beans, XML, much more
- Development pieces
- javac compiler
- jdb command-line debugger
- javah, javap, javadoc, jar utilities
- Documentation
- SCO Release Notes
- Sun doc references
- Demos
- including C/C JNI
43Summary
- OpenServer 6 has two ABI worlds
- Modern apps and single certification use
OpenServer 6 Dev Sys with SVR5/UDK ABI - Legacy apps use OpenServer 6 Dev Sys with OSR ABI
- OpenServer 6 development tools are modern,
full-featured, optimizing, strong on debugging
and memory checking - a major upgrade from existing OSR5 DevSys!
44Developer Resources
45OpenServer 6 Support Resources
- Porting Guide
- http//www.sco.com/support/docs/openserver/600/por
ting/osr6portingTOC.html - Upgrade Guide
- http//www.sco.com/support/docs/openserver/600/upg
rade/index.html - Knowledge base
- http//wdb1.sco.com/kb/search
- Online Documentation and Late News
- http//www.sco.com/support/docs/openserver/
46OpenServer 6 Support Resources
- Support Download Page for OpenServer 6
- http//www.sco.com/support/update/download/product
.php?pfid12prid20 - SCO Legend Mailing List Public
- Legend-subscribe_at_list.sco.com
- Porting/Migration Alias
- osr5to6_at_sco.com
- Certified and Compatible Hardware
- http//www.sco.com/chwp
47Questions and Answers