One other change that showed up when gathering data for this list was that
the Oracle Database 12c prerequisites package was renamed between beta &
GA to better match the database naming style - previously it was called
group/prerequisite/oracle/oracle-rdbms-server-12cR1-preinstall
but is now
group/prerequisite/oracle/oracle-rdbms-server-12-1-preinstall.
Fortunately, you don't have to type in the whole FMRI to install it,
pkg install oracle-rdbms-server-12-1-preinstall is enough.

Detailed list of changes

This table shows most of the changes to the bundled packages between
the 11.2 beta released in April, and the 11.2 GA release in July.

As before, some were excluded for clarity, or to reduce noise and
duplication. All of the bundled packages which didn’t change the version number
in their packaging info are not included, even if they had updates to fix bugs,
security holes, or add support for new hardware or new features of Solaris.

Monday Jun 09, 2014

In Solaris 11.1,
I updated the system headers to enable use of several attributes on
functions, including noreturn and printf format, to give
compilers and static analyzers more information about how they are used to
give better warnings when building code.

In Solaris 11.2, I've gone back in and added one more attribute to
a number of functions in the system headers:
__attribute__((__deprecated__)). This is used to warn people
building software that they’re using function calls we recommend
no longer be used. While in many cases the
Solaris Binary Compatibility Guarantee means we won't ever remove
these functions from the system libraries, we still want to discourage
their use.

I made passes through both the POSIX and C
standards, and some of the Solaris architecture review cases to come up with
an initial list which the Solaris architecture review committee accepted to
start with. This set is by no means a complete list of Obsolete function
interfaces, but should be a reasonable start at functions that are well
documented as deprecated and seem useful to warn developers away from.
More functions may be flagged in the future as they get deprecated, or if
further passes are made through our existing deprecated functions to flag
more of them.

To See or Not To See

To see these warnings, you will need to be building with either gcc
(versions 3.4, 4.5, 4.7, & 4.8 are available in the 11.2 package repo),
or with Oracle Solaris Studio 12.4 or later (which like Solaris 11.2, is
currently in beta testing).
For instance, take this oversimplified (and obviously buggy) implementation of
the cat command:

The exact warning given varies by compilers, and the compilers also have a
variety of flags to either raise the warnings to errors, or silence them.
Of couse, the exact form of the output is Not An Interface that can
be relied on for automated parsing, just shown for example.

gets(3C) is actually a special case — as noted above, it is no
longer part of the C Standard Library in the C11 standard, so when compiling in
C11 mode (i.e. when __STDC_VERSION__ >= 201112L), the
<stdio.h> header will not provide a prototype for it, causing
the compiler to complain it is unknown:

The gets(3C) function of course is still in libc, so if you ignore the
error or provide your own prototype, you can still build code that calls it,
you just have to acknowledge you’re taking on the risk of doing so yourself.

Tuesday Apr 29, 2014

When Solaris 11.1 came out in October 2012, I posted about the
changes to the included FOSS packages. With the publication today of
Solaris 11.2 beta, I thought it would be nice to revisit this and
see what’s changed in the past year and a half. This time around, I’m
including some bundled packages that aren’t necessarily covered by a
free software or open source license, but are of interest to Solaris users.

Removing software in updates

Last time I discussed how IPS allowed us to make a variety of
changes in update releases much more easily than in the Solaris 10 package
system. One of these changes is obsoleting packages, and we’ve done that
in a couple rare cases in both Solaris 11.1 and 11.2 where the software is
abandoned by the upstream, and we’ve decided it would be worse to keep it
around, potentially broken, than to remove it on upgrade.

When we do this, notices will be posted to the End of Features for Solaris 11 web page, alongside the list of
features that have been declared deprecated and may be removed in
future releases. As you can see there, in Solaris 11.1 the Adobe
Flash Player and tavor HCA driver packages were removed.

In Solaris 11.2, three more packages have been removed. slocate
was a “secure” version of the locate utility, which wouldn’t show
a user any files that they didn’t have permission to access. Unfortunately,
this utility was broken by changes in the AST library, and since there is no
longer an upstream for it, we decided to follow the lead of several Linux
distros and moved to mlocate
instead, which is added in this release.

The other two removed packages are both Xorg video drivers - the nv
driver for NVIDIA graphics, and the trident driver for old
Trident graphics chipsets. Most users will not notice these removals, but
if you had manually created an xorg.conf file specifying one of these drivers,
you may need to edit it to use the vesa driver instead.

NVIDIA had previously supported the nv open source driver and
contributed updates to X.Org to support new chipsets in it, but in 2010, they
announced they would no
longer do so, and considered nv deprecated, recommending the use of
the VESA driver for those who had no better driver to use. While we had
continued to ship the nv driver in Solaris, it led to an increasing number of
crashes, hangs, and other bugs for which the resolution was to remove the nv
driver and use vesa instead, so we are removing it to end those issues.
For systems with graphics devices new enough to be supported by the bundled
nvidia closed-source driver, this will have no effect. For those
with older devices, this will cause Xorg autoconfiguration to load the vesa
driver instead, until and unless the user
downloads & installs an appropriate NVIDIA legacy driver.

The trident driver was still in Solaris even after we dropped
32-bit support on x86, and years after Trident Microsystems exited the
graphics business and sold its graphics product line to XGI, as the
Sun Fire V20z server included a Trident chipset for the console video device.
Unfortunately, the upstream driver has been basically unmaintained since
then, and Oracle has had to apply patches to port to new Xorg releases.
Meanwhile, in order to resolve bugs that caused system hangs, the
trident driver was modified to not load on V20z systems, which left us
shipping an unmaintained driver solely for a system that could not use it,
but uses the vesa driver instead, so we decided to remove it as well.

If you had either of these Xorg driver packages installed, then when you
update to 11.2, then pkg update will inform you there are release
notes for these drivers, to warn you of the possibility you may need to edit
your xorg.conf.

System Management Stack

The popular Puppet
system for automating configuration changes across machines has been included
in Solaris, and updated to support several Solaris features in both the
framework and in individual configuration provideers. For instance,
configuration changes made via Puppet will be recorded in the Solaris audit
logs as part of a puppet session, and Puppet’s configuration file is generated
from SMF properties using the new SMF stencil facilities. Providers are included that can configure IPS
publishers, SMF properties, ZFS datasets, Solaris boot environments, and
a variety of Solaris NIC, VNIC, and VLAN settings.

Another addition is the Oracle Hardware Management Pack (HMP), a set of tools that work with the ILOM,
firmware, and other components in Sun/Oracle servers to configure low-level
system options. Previously these needed to be downloaded and installed
separately, now they are a simple pkg install away, and kept up to date with
the rest of the OS.

A collaboration with Intel led to the integration of a Solaris port of
Intel’s numatop tool for observing
memory access locality across CPUs.

The Java 8development kit & runtime environment are both available
as well. The default installation clusters will only install Java 7, but
you can install the Java 8 runtime with “pkg install jre-8”
or get both the runtime & development kits with
“pkg install jdk-8”. The /usr/java mediated link,
through which all the links in /usr/bin for the java,
jar, javac, etc. commands flow will be set by default to
the most recent version installed, so installing Java 8 will make that version
default. You can see this via “ls -l /usr/java” reporting:

If you want to choose a different version to be default, you can manually set
the mediator to that version with
“pkg set-mediator -V 1.7 java”. Of course, for many
operations, you can directly access any installed java version via the
full path, such as /usr/jdk/instances/jdk1.8.0/bin/java instead of
relying on the /usr/bin symlinks.

One caveat to be aware of is that Java 8 for Solaris is only provided as
64-bit binaries, as all Solaris 11 and later machines are running 64-bit now.
This means that any JNI modules you rely on will need to be compiled as 64-bit
and any programs that try to load Java must be 64-bit. There is also no
64-bit version provided of either the Java plugin for web browsers, or the
Java Webstart program for starting Java client applications from web pages.

Desktop Stack

There were some feature updates in the X Window System layers of the
desktop stack though – most notably the Xorg server was upgraded from
1.12 to 1.14, and the accompanying Mesa library was upgraded
to version 9.0.3, which includes support for OpenGL 3.1 and GLSL 1.40
on Intel graphics. The bundled version of NVIDIA’s graphics driver was
also updated, to NVIDIA’s latest “long lived branch” - 331.
For users with older graphics cards which are no longer supported in this
branch, legacy branches are available from NVIDIA’s Unix driver download
site.

OpenStack

And last, but certainly not least, especially in the number of packages
added to the repository, is the addition of OpenStack support in Solaris.
The Cinder Block Storage Service, Glance Image Service, Horizon Dashboard,
Keystone Identity Service, Neutron Networking Service, and Nova Compute
Service from the OpenStack Grizzly (2013.1) release are all provided, in versions
tested and integrated with Solaris features.
Between the Open Stack packages themselves and all the python modules required
for them, there’s over 100 new FOSS packages in this release.

Detailed list of changes

This table shows most of the changes to the bundled packages between
the original Solaris 11.1 release, the latest Solaris 11.1 support
repository update (SRU18, released April 14, 2014), and the Solaris
11.2 beta released today.

As with last time, some were excluded for clarity, or to reduce noise and
duplication. All of the bundled packages which didn’t change the version number
in their packaging info are not included, even if they had updates to fix bugs,
security holes, or add support for new hardware or new features of Solaris.