Solaris っていまどうなってるの？ 2016 末

[Oracle Solaris](https://www.oracle.com/solaris/solaris11/index.html) っていまどうなってるの?ってことで、色々と公開されているものからネタをかき集めて、ちょっとだけ整理してみようかと思います。

その前に Solaris ってなによ？聞いたこともない。という人もいるかと思います。
簡単に言うと、[UNIX として認証を受けたオペレーティングシステム](http://www.opengroup.org/openbrand/register/brand3585.htm)です。
より身近な製品ですと Apple の [macOS も UNIX として認証を受けているオペレーティングシステム](http://www.opengroup.org/openbrand/register/apple.htm)となります。

ようは、オペレーティングシステムですね。OS ですね。

## 現役の Solaris と将来の Solaris について

現役の Solaris は下記になります。

* Solaris 10 1/13
* Solaris 11.3 

2005 年にリリースされた Solaris 10 が未だに現役です。ただし、アップデートリリースとしては、2013 年にリリースされた 1/13 (Update 11) が最後となり、以降はパッチによる不具合の修正を提供となっています。
新しい機能については、Solaris 11 以降での提供となります。

そして、最新の Solaris リリースという事になりますが、こちらは、Solaris 11 となります。Solaris 11 の最初のリリースは、2011/11 となり、現在は、2015/10 にリリースされた Solaris 11.3 が最新となります。

覚えいる人はもういないと思いますが、Solaris 11 は First Cloud OS としてリリースされ、Solaris 10 で提供された Solairs Zones (当時は Solaris コンテナ呼ばれていました) によるシステムの仮想化機能を拡張/強化し、ストレージやネットワークの仮想化機能を新たに追加した OS としてデビューしました。

* [Oracle Solaris 11 における システム、ネットワーク、ストレージの仮想化機能](http://www.slideshare.net/satokaz/oracle-solaris-11) 

みんな大好き ZFS ファイルシステムも Solaris 生まれですが、Solaris 10 までの仕組が大きく変更されています。  
ここまで読んで興味をもった(えっ なら、マニュアルもどうぞ。読み物としてもおもしろいです。と思います。(筆者比

* [Oracle Solaris 11.3 Information Library (日本語)](http://docs.oracle.com/cd/E62101_01/)

## Solaris Next

そして、最近、ちらほら見かけるようになったのが、

* Solaris Next

です。
Solaris Next ってなんだよ？ ってなるわけですが、まぁ、次です。次ですね。
主に、[Oracle OpenWorld Session Catalog 2016](https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?search.event=oracleopenworld) から、`Solaris` をキーワードに色々と拾い集めてみました。

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Coming soon in next <a href="https://twitter.com/hashtag/Solaris?src=hash">#Solaris</a> version: Analytics, EndToEnd Tracing, Online Patching, Docker... <a href="https://t.co/sQZ2tDWsX4">pic.twitter.com/sQZ2tDWsX4</a></p>&mdash; Bruno Philippe (@BrunolPhilippe) <a href="https://twitter.com/BrunolPhilippe/status/781596618114101248">September 29, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

Analytics とか End to End Tracing とか Online Patching とか Docker とか・・・色々とキーワードが出てきていますね。

## 仮想化機能関連

やはり、まずはじめに多く見える情報としては、仮想化関連が目につきます。
このあたりは、Solaris の代表的な機能となり、新しいことを説明する際にも組み合わせて紹介されることが多いです。

### Solaris Zones 

Solaris Zones は、Solaris 上のコンテナ技術となります。この機能は 2005 年にリリースされた Solaris 10 から実装されており Solaris 観点では枯れた機能となっています。

昔は、Hypervisor などを利用しない Zero オーバーヘッドの仮想化機能とか言っていた時期もありました。
最近では、Type 2 Hypervisor に似たような実装を利用する Solaris Kernel Zones なるものも出て、Kernel 毎動かすこともでき、より隔離性を高めることなどが可能になってきています。

また、再起動不要でリソースを動的に変更できたり、読み込み専用(動的に変更可能)にできたり、iSCSI を利用した専用 LUN を割り当てることができたりと、<S>最初のコンセプトはなんだったんだ的な</S>機能強化されています。

引用となりますが、Solaris では、下記の図のように複数の仮想化テクノロジーを選択肢として用意し要件により最適なものを選択してもらう方法をとっています。

Solaris Next でも、このあたりには大きな変更はなく、これらが Solaris の仮想化機能のベースになります。

  * **Native Zones:** Solaris Zones 
  * **Kernel Zones:** Solaris Kernel Zones となり KVM にたとえることができるかと思います
  * **Zones in OVM Server for SPARC:** Oracle VM for SPARC と呼ばれる機能を使った HW の論理分割

Unified Archives とは、動いているシステムから作成するシステムのアーカイブを意味します。このアーカイブはベアメタルでも仮想化機能上でも、とにかく動いている Solaris から作成することができ、そして、作成元の環境に依存することなく、それぞれの環境にデプロイすることがでいます。(Native Zones -> ベアメタルやその逆も可能)

![](https://blogs.oracle.com/listey/resource/which-v12n-v2.png)

引用元: <https://blogs.oracle.com/listey/entry/which_oracle_solaris_virtualization>

### Docker をサポート

Solaris ではコンテナ技術を提供していると書きましたが、Solaris Next では、Docker がサポートされることがわかっています。

すでに、Solaris で Docker をサポートすることはアナウンス済みでしたが、ようやく姿をあらわしてきました。
いまのところは、Docker リポジトリへのコミットから推測することしかできないのですが、ZFS や IPS Package System など Solaris のユニークな機能を活用した実装になっているようです。
Solaris Zones は OS コンテナとなるため、OS のコンポーネントも多数含んでおり、仮想環境イメージとしてフットプリントが大きいのかなと感じています。
このあたりが Docker でどのように改善されるかにも期待したいところです。

Kubernetes などのようなライフサイクルを管理するツールは、そのまま使える気がしないのですが、さてさてどうなっちゃうかなという楽しみの一つです。
先に紹介した仮想化機能と組み合わせることもできるので、Solaris なりの使い方など模索したいと考えています。

* [Add functional support for Docker sub commands on Solaris #28056](https://github.com/docker/docker/pull/28056)
* [Add support for containerd,containerd-shim and ctr for Solaris. #261](https://github.com/docker/containerd/pull/261)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">Get the <a href="https://twitter.com/hashtag/Docker?src=hash">#Docker</a> Engine to build clean on <a href="https://twitter.com/hashtag/Oracle?src=hash">#Oracle</a> <a href="https://twitter.com/hashtag/solaris?src=hash">#solaris</a> <a href="https://t.co/ZQAQ9QdutF">https://t.co/ZQAQ9QdutF</a></p>&mdash; Anup Sekhar (@anupcs) <a href="https://twitter.com/anupcs/status/722234327707168768">2016年4月19日</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

[Docker EngineのメンテナにNTT須田氏が就任。「Dockerの品質の維持・向上を中心に取り組んでいく」](http://www.publickey1.jp/blog/16/docker_enginenttdocker.html)
> **須田氏** 近々、Docker 1.13がリリースされます。1.12で導入されたSwarmモードに関して高可用スケジューラの追加や、秘密ファイル管理機能の追加など、大幅な改善がなされる予定です。
その他、CRIUを用いたチェックポイント機能や __Solaris__ サポートなども予定されています。

また、Docker をビルドするために必要な Go 言語も既に Solaris ではサポート済みとなります。
Go 言語については、過去に少しまとめていますので、こちらの記事も参考にして頂ければと。

  * [Golang って Solaris ではどうなのか調べてみた](http://qiita.com/satokaz/items/e0ef0394da80752b1cbd)

### Oracle Solaris Sandbox

Solaris Zones や Docker ほどリッチな環境は必要なく、アプリケーションを隔離したいという時に利用することができる機能
のようです。また、sandbox 間で親子関係を持たせることも可能、Sandbox API を使えば、共有メモリもラベルを付けて隔離できるようです。
Solaris Zones の中でも利用することができるとのことで、アプリケーションレベルでですが、コンテナの中を更に細かく分けることも可能ですかね。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Sandbox ってなに<br>Securing Your Enterprise Applications with Sandbox in Oracle Solaris [HOL5427]<a href="https://t.co/cSfHedqpdt">https://t.co/cSfHedqpdt</a> <a href="https://t.co/FNzVcNPkuB">pic.twitter.com/FNzVcNPkuB</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/782222913474748416">October 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

### Open vSwitch をサポート

仮想 NIC やスイッチの機能については、Solaris 11 で大きく変更されたネットワークスタック (Project Crossbow と呼ばれていた) によりすでに実装されており、Solaris Zones などで利用されています。
また、ホストを跨いだ仮想スイッチを作成できる EVS (Elastic Virtual Switch) と呼ばれる機能も提供し、VLAN, PVLAN, VXLAN などと組み合わせることで仮想スイッチレベルでテナントを分けも可能です。

これらを OpenStack でも利用できるように Neutron に EVS plugin を実装していましたが、ベースとなっているのは ML2 plugin ではないため実質的には Solaris の実装のみ利用可能な専用 Neutron になっています。

Solaris 以外のプラットフォームと相互運用するために Open vSwitch の採用を決めたようです。

* [OvS 2.6 & OVN on Solaris](http://openvswitch.org/support/ovscon2016/8/1300-das.pdf)

現時点では、下記が実装され OpenDaylight もサポートすることがわかります。

* OVS 2.3.2 LTS
* OpenStack ml2 OVS plugin (mitaka)
* Works well with OpenDaylight

Open vSwitch は OVN に名称が変更されましたが、OVN ではすでに Linux/Solaris の OpenStack 環境の相互接続ができているようです。
そうそうに OVN へ以降し、OpenStack Neutron ML2 Plugin も提供、変更点は Upstream へ寄贈するとのことです。 

* Openstack + OVN plugin (Ubuntu) connected to Solaris OVS + OVN controller

Elastic Virtual Switch の考え方も良かったのですが、どうなる EVS って感じです。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Linux/Solaris 相互運用を実現するために OVS 入れるよー<br><br>Become an OpenStack Guru in 45 Minutes [CON2969]<a href="https://t.co/LceN9YCgsX">https://t.co/LceN9YCgsX</a> <a href="https://t.co/SrVhivsi7s">pic.twitter.com/SrVhivsi7s</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/782231710704373763">October 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

また、ネットワークを跨いだ環境で有効な ETrace (End to End Trace) なるものもあるようです。

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Now <a href="https://twitter.com/MarkusFlierl1">@MarkusFlierl1</a> is showing <a href="https://twitter.com/ORCL_Solaris">@ORCL_Solaris</a> taking Dtrace to the next level with Etrace: end-to-end tracing across the network. <a href="https://twitter.com/hashtag/OOW16?src=hash">#OOW16</a></p>&mdash; Alan Coopersmith (@alanc) <a href="https://twitter.com/alanc/status/778302730678919168">September 20, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## OpenStack

仮想化まわりの話が出てくると、避けては通れないのが OpenStack ですね。Solaris 的には。
はい、Solaris にも OpenStack あります。Open vSwitch の部分でも触れましたが、Solaris 11.2 からサポートしています。

目下のところ OpenStack on Solaris のターゲットは、Solaris で作る Enterprise OpenStack 環境となります。
nova で扱えるのも Solaris Zones と Solaris Kernel Zones のみになります。

Solaris 11.3 では、Juno でしたが、Solaris 11.3 SRU9 (Solaris 11 のアップデータのようなもの)では、OpenStack Kilo にアップデートされ、検証環境作成の手助けとなる Bring-Up Test Tool も
GitHub の [Solaris Openstack Utilities and Tools Project](https://github.com/oracle/solaris-openstack-utils) リポジトリで公開されました。

更に、最近の SRU では、OVM for SPARC もサポートしました。
OVM for SPARC は SPARC Hadware に搭載された Hypervisor が論理的な HW 分割を提供する機能です。詳細は割愛します。ごめんなさい。
(ちなみに、OVM for SPARC は Oracle VM for SPARC ですが、Oracle VM for x86 とは実装が異なるため、別物となります。)

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Solaris 11.3 SRU 12 で OpenStack Nova driver for OVM for SPARC 入ってた。Solaris 10 も Guest でいけるのかよ・・・<a href="https://t.co/MkrGGT8nK1">https://t.co/MkrGGT8nK1</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/788221789797093376">October 18, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

だんだん疲れてきました・・・

## ZFS ファイルシステム

Solaris に搭載される ZFS ファイルシステムとしての目新しい情報は見つけられませんでしたが、zCloud という気になるキーワードに遭遇しました。
ネットワークが介在するけど、もしかして、そのあたりの遅延は ZFS が持つ SLOG とか L2ARC でカバーできたりする？と期待させてくれますが、はやく出てこい。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Amazon S3 とか OpenStack Swift とか Oracle storage cloud みたいなObject Storage を ZFS の vdev として見せて zpool create できるようになるのが zCloud ってことだけど、なにそれ… <a href="https://t.co/QG6wDdEcFa">https://t.co/QG6wDdEcFa</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/780203877442269184">September 26, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">おい、これってアレだろ？<br><br>Lessons Learned Supporting 650 PB of Cloud Storage [THT8057]<a href="https://t.co/BH6U23u651">https://t.co/BH6U23u651</a> <a href="https://t.co/URCaWIVgwW">pic.twitter.com/URCaWIVgwW</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/781849077696729088">September 30, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## Solaris に含まれるオープンソースソフトウェアについて

Solaris は商用 OS ということもあり、ライセンスが異なるオープンソースソフトウェアを `solaris-userland` というようにカテゴリ分けをし、公開可能なものを公開しています。

* [solaris-userland~gate](https://hg.java.net/hg/solaris-userland~gate/branches)
* [solaris-x11~x-s12-clone](https://hg.java.net/hg/solaris-x11~x-s12-clone)

active branch としては、`default` と `s11u3-sru` (solaris-userland~gate のみ) があり、それぞれ:

  * **default**: 最新の branch となり、次の Solaris に含まれるオープンソースソフトウェア群
  * **s11u3-sru**: Solaris 11.3 をターゲットとしたオープンソースソフトウェア群

となっていて、solaris-userland の情報からも断片的ではありますが、Docker, Open vSwitch, OpenStack, llvm, golang, Intel OpenMP, GNOME 3 など、提供されるものがなんとなくわかります。

node.js がありません。ひとまず、下記で。

  * [Node.js って Solaris ではどうなのか調べてみた](http://qiita.com/satokaz/items/b7345834ee8950e42e90)


## Gnome 3.0

いきなり GNOME かよってことで、Solaris に GNOME 3 が実装されるとは思いませんでした。

https://blogs.oracle.com/darren/entry/gnome_3_on_solaris

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">GNOME 3 finally integrates into Solaris dev train! <a href="https://t.co/qQzTSUAIz5">https://t.co/qQzTSUAIz5</a> Congrats to <a href="https://twitter.com/alanc">@alanc</a> and team! <a href="https://t.co/qTKo8FgJFO">https://t.co/qTKo8FgJFO</a></p>&mdash; Oracle Solaris (@ORCL_Solaris) <a href="https://twitter.com/ORCL_Solaris/status/793594673038176256">November 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr"><a href="https://twitter.com/hashtag/GNOME?src=hash">#GNOME</a> 3 integrated in to Oracle <a href="https://twitter.com/hashtag/Solaris?src=hash">#Solaris</a> development release Userland consolidation: <a href="https://t.co/RH2KPAnipl">https://t.co/RH2KPAnipl</a> nice new desktop look &amp; feel</p>&mdash; Darren Moffat (@darrenmoffat) <a href="https://twitter.com/darrenmoffat/status/793751010372091905">November 2, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">まじか <a href="https://t.co/rZLSkf44QG">https://t.co/rZLSkf44QG</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/789935192680992768">October 22, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

まじだったようです。

## DevOps

こ、これは・・・
生暖かく見守ってください。

[Practical DevOps withOracle Solaris Virtualization](https://oracle.rainfocus.com/scripts/catalog/oow16.jsp?search=CON6229)

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">節子！それ DevOps やない！Enterprise DevOps や！！<br><br>ん？<br><br>Hand in Hand: Practical DevOps with Oracle Virtualization [CON6229]<a href="https://t.co/22iKIYR8Q6">https://t.co/22iKIYR8Q6</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/782229899037642752">October 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## Security

セキュリティ絡みにしていますが、長年の夢だった Hot Patching 機能もついに実現するようです。

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/Solaris?src=hash">#Solaris</a> が取り組んでいる Hot Patching 機能を体験するための HOL 資料がポロっと<br><br>Using Hot Patching to Stay Secure and Compliant [HOL7308]<a href="https://t.co/CkhMACa0bE">https://t.co/CkhMACa0bE</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/782227348313604096">October 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## まとめ

はやいですね。
次の Solaris では、新機能などあわせて 1,400 を超える機能強化が予定されているとのことで楽しみですね！

セキュリティ機能の強化を押しつつ、Analytics と呼ばれるシステム情報の可視化、オープンソースソフトウェアの拡充など、なんとなく目指す方向性は見えてきているような気もしますが、全容が出てこないことにはなんとも言えませんね。

リリース時期については、まだ、発表はありませんが、出てくる情報が増えてきているので、それほど遠い未来ということではなさそうですが・・・楽しみに待ちましょう。

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Over 1,400 New Enhancements <a href="https://t.co/xIxi4qeAhA">https://t.co/xIxi4qeAhA</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/788156507976105984">October 17, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

ちょっと、統一感ない感じでおなかいっぱいなってしまいましたが、まだまだ続くよ Advent Calendar 2016 というわけで、書けなかった事を別の日にでも補ってみたいと考えています。
プログラミングするにも OS も関係するようねということで、お許しください。


## おまけ: SPARC 絡み

SPARC 絡みでも色々と資料が公開されていました。
SPARC に搭載される DAX (Data Analytics Accelerator) と呼ばれるハードウェア機能を API から利用することで、パフォーマンスを向上することに役立てることができるようです。

* [Open DAX APIs on SPARC M7](https://swisdev.oracle.com/DAX/)
* [What Is the SPARC M7 Data Analytics Accelerator?](https://community.oracle.com/docs/DOC-994842)
* [Apache Spark and SPARC M7 Data Analytics Accelerator](https://community.oracle.com/docs/DOC-994843)
* [DAX Sample programs](https://swisdev.oracle.com/DAX/DAXsampleprograms.php)
* [Oracle’s Software in Silicon Technology: Data Analytics Accelerators (DAX)](https://www.youtube.com/watch?v=fxm_Wf7SlXE&feature=youtu.be)
* [man pages section 3: DAX Library Functions](https://swisdev.oracle.com/_files/DAXmanpage/index.html)


<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">JDK 8 Lambda Stream execution with DAX<br><br>Accelerating Java Stream Analytics with Oracle Data Analytics Accelerator<a href="https://t.co/2AudiBhPeX">https://t.co/2AudiBhPeX</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/782245604890071040">October 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">OpenDAX とか JDK 8 with DAX とか<br><br>Accelerating Apache Arrow and QuartetFS ActivePivot with Software in Silicon [CON6383]<a href="https://t.co/GL68ajOR0M">https://t.co/GL68ajOR0M</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/782242404187242496">October 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">SPARC で SPARK (やってみたかった<br><br>+Apache Spark の紹介<br><br>Analytics Pipeline with Apache Spark SQL and Machine Learning [CON6704]<a href="https://t.co/YwjpVRU5dy">https://t.co/YwjpVRU5dy</a></p>&mdash; Kazuyuki Sato (@satokaz) <a href="https://twitter.com/satokaz/status/782239666892255233">October 1, 2016</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>