This section describes enhancements for developers that are new in this release that make developing applications on the Oracle Solaris platform easier with state-of-the-art libraries and reliable frameworks.
Oracle Solaris 11.4 contains support for the C11 programming language standard: "ISO/IEC 9899:2011 Information technology - Programming languages - C". The C11 standard is a compatible revision of the C99 standard. Historically, the C programming language standard has been part of the Single UNIX Specification. However, the new C programming language standard, C11, is available separate from and ahead of the next UNIX specification.
Oracle Solaris 11.4 provides support for C11 alongside C99 to provide customers with C11 support ahead of its inclusion in a future UNIX specification. The new standard can be used with the Oracle Developer Studio 12.5 or 12.6, GCC 5 or 7, and LLVM/Clang 6.0 C compilers. Developers can also write C programs using the newest available C programming language standard.
In Oracle Solaris 11.4, the default compilation mode (when no feature test macros are used to request conformance to a particular POSIX standard), makes the following visible:
The name space that corresponds to the latest POSIX specification
All other functions and names normally provided by the Oracle Solaris OS
For Oracle Solaris 11.4, the latest POSIX specification is IEEE Std. 1003.1-2008 Base Specifications, Issue 7 (aka XPG7, UNIX V7, SUSv4).
Binary compatibility is maintained. However, source compatibility might be affected in the following ways:
The feature test macro _POSIX_PTHREAD_SEMANTICS is obsolete and no longer needed. It will not be tested by any header file. Versions of interfaces that previously were made visible only by using -D_POSIX_PTHREAD_SEMANTICS or appropriate standards feature test macros are now visible by default. These include asctime_r(), ctime_r(), getgrgid_r(), getgrnam_r(), getlogin_r(), getpwnam_r(), getpwuid_r(), readdir_r(), sigwait(), and ttyname_r(). The previous default interfaces, which were based on a draft POSIX Threads standard, are still available at compilation time by using -D__USE_DRAFT6_PROTOTYPES__. See the intro(3) man page for more information.
Previously, -D_XOPEN_SOURCE=500 was required in order to use the sockets interfaces defined by the X/Open standard. These interfaces are now visible in the default compilation environment as well. Compilation of applications that rely on the old SunOS4.x style sockets now requires the use of -D__USE_SUNOS_SOCKETS__. See socket.h(3HEAD) for more information.
Oracle Solaris 11.4 includes a new process control library, libproc, which provides a higher-level interface to features of the /proc interface. The library also provides access to information such as symbol tables, which are necessary for the examination and control of processes and threads.
A controlling process using libproc can typically:
Grab a victim process, suspending its execution
Examine the state of the victim process
Examine and modify the address space of the victim process
Make the victim process execute system calls on behalf of the controlling process
Release the victim process to run again unmolested
The libproc library provides all the mechanisms needed by a breakpoint debugger to do its job. It also facilitates the creation of simple one-shot controlling applications to do simple things to victim processes without the processes being aware of the intrusion.
For more information, see the libproc(3LIB) man page.
Oracle Solaris 11.4 includes improvements to the existing locale support APIs provided by libc and the addition of new APIs defined in the UNIX V7 standard. uselocale and other APIs defined in the UNIX V7 standard have been introduced to support locales between threads and changing the locale of the thread. In combination with the new APIs, the existing locale support APIs have been updated to be fully MT-safe. The underlying locale handling in libc has been improved for better performance, and smaller resource usage of applications that use multiple locales.
Oracle Solaris 11.4 now implements user-mode watchpoints with Silicon Secured Memory (SSM) instead of virtual memory maps. A watchpoint is an event that is triggered when a memory location is written to or read from, and can be used for debugging and performance analysis. Watchpoints are currently implemented by making the page containing the address inaccessible. This action greatly slows execution if the thread frequently touches unrelated locations on the same page. By contrast, SSM has a much finer granularity with the 64-byte cache-line. In addition, SSM is multi-threaded, whereas all threads share the same virtual memory pages.
For more information, see the dbx(1) and mdb(1) man pages.
Oracle Solaris 11.4 includes a new process control library, libdtrace, that enables developers to write bespoke DTrace applications.
For more information, see Appendix A, libdtrace API Reference, in Oracle Solaris 11.4 DTrace (Dynamic Tracing) Guide.
In Oracle Solaris 11.4, DTrace can use DWARF to perform address to source code metadata translation for user processes. The new uresolve option enables the ustack, uaddr, and printf actions of DTrace to translate user addresses to source code file names and line numbers, given the presence of DWARF debugging information. This feature provides a more intuitive interpretation of common diagnostic output while retaining compatibility with common compiler standards.
For more information, see the ustack, uaddr, and printf actions in Data Recording Actions in Oracle Solaris 11.4 DTrace (Dynamic Tracing) Guide.
In Oracle Solaris 11.4, the pstack command will annotate frames with source code metadata, given the presence of DWARF debugging information. This feature provides a more intuitive interpretation of common diagnostic output while retaining compatibility with common compiler standards.
For more information, see pstack in the proc(1) man page.
In Oracle Solaris 11.4, both pstack and mdb support DWARF and DWARF-style stack unwinding for user processes. In addition, pstack and mdb also allow the recovery of function arguments from processes compiled with the new -preserve_argvalues=complete option of Oracle Developer Studio. This capability provides particular improvements to the observability and diagnosability of amd64 processes, though the functionality applies to both 32- and 64-bit processes on both x64 and SPARC.
The mdb ::stackregs dcmd is now enabled for amd64, where frames’ registers are recovered using DWARF-style unwind tables.
Cython is an optimizing static compiler for both the Python programming language and the extended Cython programming language which is based on Pyrex. This feature enables generation of high performance code using Python.
For more information, see Cython C-Extensions for Python.
Oracle Database Programming Interface-C (ODPI-C) is a wrapper around the Oracle Call Interface (OCI), working transparently with different versions of the Oracle Instant Client libraries.
ODPI-C eliminates the requirement for applications to set LD_LIBRARY_PATH prior to execution. Additionally, ODPI-C works transparently with multiple versions of the Oracle Instant Client libraries. Software that requires use of the Oracle Instant Client libraries will not require setting ORACLE_HOME prior to execution.
To use ODPI-C, install the developer/oracle/odpi package.
For more information about ODPI-C, see the Oracle Database Programming Interface for Drivers and Applications project on GitHub and the libodpic(3LIB) man page. Oracle Instant Client is available in IPS format, and no visit to OTN to download .zip files is necessary.
cx_Oracle is a Python module that enables you to access Oracle Database 12c and 11i from Python applications. While the module is commonly available through prebuilt packages for other operating systems, it has not until now been similarly available for Oracle Solaris. The module is available in both 32-bit and 64-bit forms. The Oracle Solaris packaged version 5.2 can be used with Python 2.7 and 3.4.
For more information, see cx_Oracle’s documentation.