VirtualBox 6.0 から Hyper-V と共存できるはず

# 今まで

長い間、VirtualBox を用いた仮想マシンの動作と、Windows の Hyper-V 有効状態は共存できないとされてきた。実際に、Hyper-V を有効にした状態で起動した Windows の上では、CPU による仮想化支援を Windows が占有するため、VirtualBox 上で仮想化支援を利用できなかった。したがって、VirtualBox (や VMWare)を利用した VM 実行のパフォーマンスは劣化するし、エラーの発生を招いていた。VirtualBox は完全仮想化したホスト OS の実行のために、VT-x や AMD-V を利用していたからである。

記事として [VT-xとHyper-VとVirtualBoxの関係についてのメモ](https://qiita.com/tettsu__/items/1f0cb8a752757d76ebbd), [VirtualBoxで64bitVMを作れるようにする(Hyper-V有効なWindows 8.1 Pro編)](https://qiita.com/alaif-net@github/items/57a10b6e6d4de3b4583f), [Vagrant 事始め 番外編 01 - Virtualbox が起動しない](https://qiita.com/centipede/items/8891a8f033fe2ac788b9), [Hyper-V をオン/オフする方法](https://qiita.com/masoo/items/b73dadb0e99f9be528fe) 等が書かれている。

# VirtualBox 6.0 のリリースと Hyper-V

VirtualBox 6.0 が 2018/12/18 にリリースされたが、「フォールバック実行コアとしてHyper-Vを使用する」ことができるようになっている。[Changelog for VirtualBox 6.0](https://www.virtualbox.org/wiki/Changelog-6.0), [VirtualBox 6.0がリリース](https://gihyo.jp/admin/clip/01/linux_dt/201812/19), [VirtualBox 6.0登場](https://news.mynavi.jp/article/20181220-743127/) 等で言及されている。

恐らくこういうことではないか。Hyper-V (機能)が有効な状態では、Hyper-V (というソフトウェア) 上で、仮想マシンを動かすことができる。これと同じように、VirtualBox (というソフトウェア) は、VT-x という CPU 命令そのものは使えなくても、Hyper-V の機能を上手に呼び出すことで、CPU 支援による完全仮想化を達成する…と思われる。Hyper-V (というソフトウェア)による仮想マシン管理と同じレベルに、VirtualBox (による管理)を置くことができる…ということだろう。

Hyper-V によって仮想化されたゲスト Windows OS (子)は、その中で Hyper-V 機能を有効にし、(孫) 仮想化したテスト OS の起動ができる。この Nested Hyper-V という機能は2015年後半に早期プレビューとして実装された様子である。[Hyper-Vの上でさらにHyper-Vを動かせるNested Hyper-V。Windows 10の新ビルドで登場](https://www.publickey1.jp/blog/15/nested_hyper-v_windows_10.html) (2015年10月15日) が日本語で分かりやすい。日本語訳を引用する。

> Hyper-Vは仮想マシンの実行の際にハードウェアの仮想化支援機能に依存します（例：Intel VT-xやAMD-Vなど）。基本的には、Hyper-Vをインストールするとハイパーバイザはこうした機能をゲスト仮想マシンからは見えなくしてしまうため、ゲスト仮想マシンにHyper-Vをインストールすることはできないのです。
> 
> Nested仮想化はこのハードウェア仮想化支援機能をゲスト仮想マシンに対しても見えるようにします。これによって、ゲスト仮想マシンでもHyper-Vのインストールが可能になり、仮想マシン“内”で仮想マシンを作成できるようになります。

「ゲスト仮想マシンで Hyper-V が実行できる」のであれば、ゲストが仮想化支援を(さらにそのゲストの実行のために)利用しているのと同じように、ホスト OS 上で動作する他の(Hyper-V 以外の)ソフトウェアが仮想化支援機能を提供できてもおかしくない。

正確な描写でない可能性があるが、Hyper-V のゲストのひとつとして、VirtualBox という仮想化ソフトウェアが動いている…と思っても良いだろう。

[VMware ESXi on Hyper-V ができるようになったので、検証環境の準備がさらに楽になった](http://pubinf.blog.jp/archives/1061974470.html) という記事があることから、ホスト(物理) OS が Nested 対応しているということが肝要のようである。

# まずは試さなくては

知ったからにはまずは試したいのであるが…私自身はまだである。早いうちに確かめてみたい。不具合の報告なのか、設定不備かは分からないが、動作しないという投稿も目にしたので気になるところである。

少なくとも「共存できないという記事しかない」という状態は回避したいと思い、投稿だけはすることにした。

# 追試

結論から言うと、動作するマシンと動作しないマシンがあった。
https://forums.virtualbox.org/viewtopic.php?f=6&t=90853
を見るとよいと思う。

~~Lenovo T480 は動かなかった。VT-x 等の挙動だから、主因は CPU だと思う。Intel の Core i7-8650U は動作不良。~~ 

2021-03-13 追記

- Hyper-V の設定
- Windows のバージョン
- VirtualBox のバージョンや設定

のいずれかに依存するようだ。Windows 10 20H2 19042.844 と 6.1.12.r139181 の組み合わせによって、Intel の Core i7-8650U でも動作した。

Surface Pro 3 はうまくいった。Intel の Core i5-4300U だった。

i5-8365U が Dell Latitude 7200 2-in-1 に載っているが、うまくいった。

# 備考

VirtualBox 5.0 から提供が始まった「準仮想化対応ゲスト OS の高速化」とはまた別の機能である。「“準仮想化”は仮想実行のために構成されたゲストOSを利用する」もので、[Oracle、“準仮想化”をサポートした「Oracle VM VirtualBox 5.0」を正式公開](https://forest.watch.impress.co.jp/docs/news/711196.html), [VirtualBox 5.0 の準仮想化で仮想マシンの動作が速くなった](http://bashalog.c-brains.jp/15/07/23-163916.php) 等を参考にしていただきたい。

# CPU の状態

https://qiita.com/kuryus/items/f703000c6396127fd519 にあるように、Intel® Processor Identification Utility を実行してみた。VT-x は×印だった…。
が、別のマシンで追試したところ、Hyper-V が有効であるときは、グレーアウトするのが通常である模様。

i5-8365U では、Hyper-V を利用して起動することができた。

VT-x, SLAT 

# 参考になりそうな記事

https://hiro20180901.hatenablog.com/entry/2019/02/09/070016

# 2020/05/29 追記

「VMware Workstation/Player」が「Hyper-V」と共存可能に ～v15.5.5が正式公開
https://forest.watch.impress.co.jp/docs/news/1255681.html

> MicrosoftはVMwareとの協力のもと、“Windows Hypervisor Platform（WHP）”と呼ばれるAPIを実装。サードパーティーに採用を進めていた。このAPIに準拠していれば、その仮想化製品を1つのシステムに「Hyper-V」と同居させることができる。

とある。Hyper-V と同居可能な　VirtualBox があったのに、このような記事を作るのは不適切。
VirtualBox に言及すべき。

# 2021-10-30 追記

> VirtualBox 6.1.28（最新）にするとHyper-Vと共存できなくなる
https://forums.virtualbox.org/viewtopic.php?f=6&t=104175&start=0

https://twitter.com/ockeghem/status/1454278730172436481

との情報あり

<!--
逆リンク
https://dexlab.net/pukiwiki/?Memo/VirtualBox
-->