xref: /cloud-hypervisor/README.md (revision 8f4de459373e0d06e79151c1386385c40f6df07b)
15d535853SRob Bradford- [1. What is Cloud Hypervisor?](#1-what-is-cloud-hypervisor)
25d535853SRob Bradford  - [Objectives](#objectives)
35d535853SRob Bradford    - [High Level](#high-level)
45d535853SRob Bradford    - [Architectures](#architectures)
55d535853SRob Bradford    - [Guest OS](#guest-os)
65d535853SRob Bradford- [2. Getting Started](#2-getting-started)
702f2eceeSRob Bradford  - [Install prerequisites](#install-prerequisites)
85d535853SRob Bradford  - [Clone and build](#clone-and-build)
95d535853SRob Bradford    - [Containerized builds and tests](#containerized-builds-and-tests)
105d535853SRob Bradford  - [Run](#run)
115d535853SRob Bradford    - [Cloud image](#cloud-image)
125d535853SRob Bradford    - [Custom kernel and disk image](#custom-kernel-and-disk-image)
13919226f3SSamuel Ortiz      - [Building your kernel](#building-your-kernel)
14919226f3SSamuel Ortiz      - [Disk image](#disk-image)
15919226f3SSamuel Ortiz      - [Booting the guest VM](#booting-the-guest-vm)
165d535853SRob Bradford- [3. Status](#3-status)
175d535853SRob Bradford  - [Hot Plug](#hot-plug)
185d535853SRob Bradford  - [Device Model](#device-model)
195d535853SRob Bradford  - [TODO](#todo)
205d535853SRob Bradford- [4. `rust-vmm` project dependency](#4-rust-vmm-project-dependency)
215d535853SRob Bradford  - [Firecracker and crosvm](#firecracker-and-crosvm)
225d535853SRob Bradford- [5. Community](#5-community)
235d535853SRob Bradford  - [Contribute](#contribute)
245d535853SRob Bradford  - [Join us](#join-us)
2502f2eceeSRob Bradford  - [Security issues](#security-issues)
26919226f3SSamuel Ortiz
27919226f3SSamuel Ortiz# 1. What is Cloud Hypervisor?
28919226f3SSamuel Ortiz
29328e950aSRob BradfordCloud Hypervisor is an open source Virtual Machine Monitor (VMM) that runs on top of [KVM](https://www.kernel.org/doc/Documentation/virtual/kvm/api.txt) and the MSHV hypervisors .
30328e950aSRob Bradford
31919226f3SSamuel OrtizThe project focuses on exclusively running modern, cloud workloads, on top of a limited set of hardware architectures and platforms.
3255069081SRob BradfordCloud workloads refers to those that are usually run by customers inside a cloud provider. For our purposes this means modern operating systems with most I/O handled by paravirtualised devices (i.e. virtio), no requirement for legacy devices, and 64-bit CPUs.
33919226f3SSamuel Ortiz
34919226f3SSamuel OrtizCloud Hypervisor is implemented in [Rust](https://www.rust-lang.org/) and is based on the [rust-vmm](https://github.com/rust-vmm) crates.
35919226f3SSamuel Ortiz
36919226f3SSamuel Ortiz## Objectives
37919226f3SSamuel Ortiz
38919226f3SSamuel Ortiz### High Level
39919226f3SSamuel Ortiz
40328e950aSRob Bradford- Runs on KVM or MSHV
410f48b612SMuminul Islam- Minimal emulation
420f48b612SMuminul Islam- Low latency
430f48b612SMuminul Islam- Low memory footprint
440f48b612SMuminul Islam- Low complexity
450f48b612SMuminul Islam- High performance
460f48b612SMuminul Islam- Small attack surface
470f48b612SMuminul Islam- 64-bit support only
480f48b612SMuminul Islam- CPU, memory, PCI hotplug
490f48b612SMuminul Islam- Machine to machine migration
50919226f3SSamuel Ortiz
51919226f3SSamuel Ortiz### Architectures
52919226f3SSamuel Ortiz
53d2741fdcSpierwillCloud Hypervisor supports the `x86-64` and `AArch64` architectures. There are some small differences in functionality between the two architectures (see [#1125](https://github.com/cloud-hypervisor/cloud-hypervisor/issues/1125)).
54919226f3SSamuel Ortiz
55919226f3SSamuel Ortiz### Guest OS
56919226f3SSamuel Ortiz
57328e950aSRob BradfordCloud Hypervisor supports `64-bit Linux` and Windows 10/Windows Server 2019.
58919226f3SSamuel Ortiz
59919226f3SSamuel Ortiz# 2. Getting Started
60919226f3SSamuel Ortiz
61*8f4de459SHenry WangBelow sections describe how to build and run Cloud Hypervisor on the `x86_64`
62*8f4de459SHenry Wangplatform. For getting started on the `AArch64` platform, please refer to the
63*8f4de459SHenry Wang[Arm64 documentation](docs/arm64.md).
64*8f4de459SHenry Wang
65*8f4de459SHenry Wang## Preparation
66*8f4de459SHenry Wang
67919226f3SSamuel OrtizWe create a folder to build and run `cloud-hypervisor` at `$HOME/cloud-hypervisor`
68919226f3SSamuel Ortiz
69919226f3SSamuel Ortiz```shell
70919226f3SSamuel Ortiz$ export CLOUDH=$HOME/cloud-hypervisor
71919226f3SSamuel Ortiz$ mkdir $CLOUDH
72919226f3SSamuel Ortiz```
73919226f3SSamuel Ortiz
74029a6d8aSMuminul Islam## Install prerequisites
75029a6d8aSMuminul Islam
76029a6d8aSMuminul IslamYou need to install some prerequisite packages in order to build and test Cloud Hypervisor.
77029a6d8aSMuminul IslamHere, all the steps are based on Ubuntu, for other Linux distributions please replace the
78029a6d8aSMuminul Islampackage manager and package name.
79029a6d8aSMuminul Islam
80029a6d8aSMuminul Islam```shell
81029a6d8aSMuminul Islam# Install git
82029a6d8aSMuminul Islam$ sudo apt install git
83029a6d8aSMuminul Islam# Install rust tool chain
84029a6d8aSMuminul Islam$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
85029a6d8aSMuminul Islam# Install build-essential
86029a6d8aSMuminul Islam$ sudo apt install build-essential
87029a6d8aSMuminul Islam# If you want to build statically linked binary please add musl target
88029a6d8aSMuminul Islam$ rustup target add x86_64-unknown-linux-musl
89029a6d8aSMuminul Islam```
90029a6d8aSMuminul Islam
91919226f3SSamuel Ortiz## Clone and build
92919226f3SSamuel Ortiz
93919226f3SSamuel OrtizFirst you need to clone and build the cloud-hypervisor repo:
94919226f3SSamuel Ortiz
95919226f3SSamuel Ortiz```shell
96919226f3SSamuel Ortiz$ pushd $CLOUDH
978ec89bc8SRob Bradford$ git clone https://github.com/cloud-hypervisor/cloud-hypervisor.git
98919226f3SSamuel Ortiz$ cd cloud-hypervisor
99919226f3SSamuel Ortiz$ cargo build --release
100919226f3SSamuel Ortiz
101919226f3SSamuel Ortiz# We need to give the cloud-hypervisor binary the NET_ADMIN capabilities for it to set TAP interfaces up on the host.
102919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./target/release/cloud-hypervisor
103919226f3SSamuel Ortiz
104029a6d8aSMuminul Islam# If you want to build statically linked binary
105029a6d8aSMuminul Islam$ cargo build --release --target=x86_64-unknown-linux-musl --all
106919226f3SSamuel Ortiz$ popd
107919226f3SSamuel Ortiz```
108919226f3SSamuel Ortiz
109919226f3SSamuel OrtizThis will build a `cloud-hypervisor` binary under `$CLOUDH/cloud-hypervisor/target/release/cloud-hypervisor`.
110919226f3SSamuel Ortiz
1118676759cSSamuel Ortiz### Containerized builds and tests
1128676759cSSamuel Ortiz
1138676759cSSamuel OrtizIf you want to build and test Cloud Hypervisor without having to install all the
1148676759cSSamuel Ortizrequired dependencies (The rust toolchain, cargo tools, etc), you can also use
1158676759cSSamuel OrtizCloud Hypervisor's development script: `dev_cli.sh`. Please note that upon its
1168676759cSSamuel Ortizfirst invocation, this script will pull a fairly large container image.
1178676759cSSamuel Ortiz
1188676759cSSamuel OrtizFor example, to build the Cloud Hypervisor release binary:
1198676759cSSamuel Ortiz
1208676759cSSamuel Ortiz```shell
1218676759cSSamuel Ortiz$ pushd $CLOUDH
1228676759cSSamuel Ortiz$ cd cloud-hypervisor
1238676759cSSamuel Ortiz$ ./scripts/dev_cli.sh build --release
1248676759cSSamuel Ortiz```
1258676759cSSamuel Ortiz
1268676759cSSamuel OrtizWith `dev_cli.sh`, one can also run the Cloud Hypervisor CI locally. This can be
1278676759cSSamuel Ortizvery convenient for debugging CI errors without having to fully rely on the
1288676759cSSamuel OrtizCloud Hypervisor CI infrastructure.
1298676759cSSamuel Ortiz
1308676759cSSamuel OrtizFor example, to run the Cloud Hypervisor unit tests:
1318676759cSSamuel Ortiz
1328676759cSSamuel Ortiz```shell
1333bf46d4cSBo Chen$ ./scripts/dev_cli.sh tests --unit
1348676759cSSamuel Ortiz```
1358676759cSSamuel Ortiz
1368676759cSSamuel OrtizRun the `./scripts/dev_cli.sh --help` command to view all the supported
1378676759cSSamuel Ortizdevelopment script commands and their related options.
1388676759cSSamuel Ortiz
139919226f3SSamuel Ortiz## Run
140919226f3SSamuel Ortiz
141919226f3SSamuel OrtizYou can run a guest VM by either using an existing cloud image or booting into your own kernel and disk image.
142919226f3SSamuel Ortiz
143919226f3SSamuel Ortiz### Cloud image
144919226f3SSamuel Ortiz
14598bce5e0SRob BradfordCloud Hypervisor supports booting disk images containing all needed
1469900daacSRob Bradfordcomponents to run cloud workloads, a.k.a. cloud images. To do that we rely on
1479900daacSRob Bradfordthe [Rust Hypervisor
1488ec89bc8SRob BradfordFirmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware) project to provide
1499900daacSRob Bradfordan ELF
150919226f3SSamuel Ortizformatted KVM firmware for `cloud-hypervisor` to directly boot into.
151919226f3SSamuel Ortiz
152a3342bdbSSebastien BoeufWe need to get the latest `rust-hypervisor-firmware` release and also a working cloud image. Here we will use a Ubuntu image:
153919226f3SSamuel Ortiz
154919226f3SSamuel Ortiz```shell
155919226f3SSamuel Ortiz$ pushd $CLOUDH
156a3342bdbSSebastien Boeuf$ wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
157a3342bdbSSebastien Boeuf$ qemu-img convert -p -f qcow2 -O raw focal-server-cloudimg-amd64.img focal-server-cloudimg-amd64.raw
1585bcbd560SRob Bradford$ wget https://github.com/cloud-hypervisor/rust-hypervisor-firmware/releases/download/0.3.2/hypervisor-fw
159919226f3SSamuel Ortiz$ popd
160919226f3SSamuel Ortiz```
161919226f3SSamuel Ortiz
162919226f3SSamuel Ortiz```shell
163919226f3SSamuel Ortiz$ pushd $CLOUDH
164919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./cloud-hypervisor/target/release/cloud-hypervisor
165919226f3SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
166919226f3SSamuel Ortiz	--kernel ./hypervisor-fw \
167a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
168e8e21aebSSamuel Ortiz	--cpus boot=4 \
16900df79a5SSamuel Ortiz	--memory size=1024M \
170919226f3SSamuel Ortiz	--net "tap=,mac=,ip=,mask=" \
171919226f3SSamuel Ortiz	--rng
172919226f3SSamuel Ortiz$ popd
173919226f3SSamuel Ortiz```
174919226f3SSamuel Ortiz
1755652cc7aSSebastien BoeufMultiple arguments can be given to the `--disk` parameter.
1769900daacSRob Bradford
177919226f3SSamuel Ortiz### Custom kernel and disk image
178919226f3SSamuel Ortiz
179919226f3SSamuel Ortiz#### Building your kernel
180919226f3SSamuel Ortiz
1815c7164e5SRob BradfordCloud Hypervisor also supports direct kernel boot into a `vmlinux` ELF kernel. In order to support virtio-iommu we have our own development branch. You are of course able to use your own kernel but these instructions will continue with the version that we develop and test against.
182d5d40537SRob Bradford
183d5d40537SRob BradfordTo build the kernel:
184919226f3SSamuel Ortiz
185919226f3SSamuel Ortiz```shell
186919226f3SSamuel Ortiz
187d5d40537SRob Bradford# Clone the Cloud Hypervisor Linux branch
188919226f3SSamuel Ortiz$ pushd $CLOUDH
189f3793c08SSebastien Boeuf$ git clone --depth 1 https://github.com/cloud-hypervisor/linux.git -b ch-5.14 linux-cloud-hypervisor
190d5d40537SRob Bradford$ pushd linux-cloud-hypervisor
191919226f3SSamuel Ortiz
192919226f3SSamuel Ortiz# Use the cloud-hypervisor kernel config to build your kernel
193d49059a3SMuminul Islam$ cp $CLOUDH/cloud-hypervisor/resources/linux-config-x86_64 .config
194919226f3SSamuel Ortiz$ make bzImage -j `nproc`
195919226f3SSamuel Ortiz$ popd
196919226f3SSamuel Ortiz```
197919226f3SSamuel Ortiz
198919226f3SSamuel OrtizThe `vmlinux` kernel image will then be located at `linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin`.
199919226f3SSamuel Ortiz
200919226f3SSamuel Ortiz#### Disk image
201919226f3SSamuel Ortiz
202a3342bdbSSebastien BoeufFor the disk image, we will use a Ubuntu cloud image that contains a root partition:
203919226f3SSamuel Ortiz
204919226f3SSamuel Ortiz```shell
205919226f3SSamuel Ortiz$ pushd $CLOUDH
206a3342bdbSSebastien Boeuf$ wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
207a3342bdbSSebastien Boeuf$ qemu-img convert -p -f qcow2 -O raw focal-server-cloudimg-amd64.img focal-server-cloudimg-amd64.raw
208919226f3SSamuel Ortiz$ popd
209919226f3SSamuel Ortiz```
210919226f3SSamuel Ortiz
211919226f3SSamuel Ortiz#### Booting the guest VM
212919226f3SSamuel Ortiz
213a3342bdbSSebastien BoeufNow we can directly boot into our custom kernel and make it use the Ubuntu root partition.
2148160c288SDayu LiuIf we want to have 4 vCPUs and 1024 MBytes of memory:
215919226f3SSamuel Ortiz
216919226f3SSamuel Ortiz```shell
217919226f3SSamuel Ortiz$ pushd $CLOUDH
218919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./cloud-hypervisor/target/release/cloud-hypervisor
219919226f3SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
220919226f3SSamuel Ortiz	--kernel ./linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin \
221a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
222a3342bdbSSebastien Boeuf	--cmdline "console=hvc0 root=/dev/vda1 rw" \
223e8e21aebSSamuel Ortiz	--cpus boot=4 \
22446eaea16SSamuel Ortiz	--memory size=1024M \
22546eaea16SSamuel Ortiz	--net "tap=,mac=,ip=,mask=" \
22646eaea16SSamuel Ortiz	--rng
22746eaea16SSamuel Ortiz```
22846eaea16SSamuel Ortiz
22946eaea16SSamuel OrtizThe above example use the `virtio-console` device as the guest console, and this
23046eaea16SSamuel Ortizdevice may not be enabled soon enough by the guest kernel to get early kernel
23146eaea16SSamuel Ortizdebug messages.
23246eaea16SSamuel Ortiz
23346eaea16SSamuel OrtizWhen in need for earlier debug messages, using the legacy serial device based
23446eaea16SSamuel Ortizconsole is preferred:
23546eaea16SSamuel Ortiz
23646eaea16SSamuel Ortiz```
23746eaea16SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
23846eaea16SSamuel Ortiz	--kernel ./linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin \
23946eaea16SSamuel Ortiz	--console off \
24046eaea16SSamuel Ortiz	--serial tty \
241a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
242a3342bdbSSebastien Boeuf	--cmdline "console=ttyS0 root=/dev/vda1 rw" \
243e8e21aebSSamuel Ortiz	--cpus boot=4 \
24400df79a5SSamuel Ortiz	--memory size=1024M \
245919226f3SSamuel Ortiz	--net "tap=,mac=,ip=,mask=" \
246919226f3SSamuel Ortiz	--rng
247919226f3SSamuel Ortiz```
248919226f3SSamuel Ortiz
249919226f3SSamuel Ortiz# 3. Status
250919226f3SSamuel Ortiz
251328e950aSRob BradfordCloud Hypervisor is under active development. The following stability guarantees are currently made:
252919226f3SSamuel Ortiz
253328e950aSRob Bradford* The API (including command line options) will not be removed or changed in a
254328e950aSRob Bradford  breaking way without a minimum of 2 releases notice. Where possible warnings
255328e950aSRob Bradford  will be given about the use of deprecated functionality and the deprecations
256328e950aSRob Bradford  will be documented in the release notes.
257328e950aSRob Bradford* Point releases will be made between individual releases where there are
258328e950aSRob Bradford  substantial bug fixes or security issues that need to be fixed.
259328e950aSRob Bradford
260328e950aSRob BradfordCurrently the following items are **not** guaranteed across updates:
261328e950aSRob Bradford
262328e950aSRob Bradford* Snapshot/restore is not supported across different versions
263328e950aSRob Bradford* Live migration is not supported across different versions
264328e950aSRob Bradford* The following features are considered experimental and may change
265328e950aSRob Bradford  substantially between releases: TDX, SGX.
266328e950aSRob Bradford
267328e950aSRob Bradford
268328e950aSRob BradfordAs of 2021-04-29, the following cloud images are supported:
2690f48b612SMuminul Islam
2700f48b612SMuminul Islam- [Ubuntu Bionic](https://cloud-images.ubuntu.com/bionic/current/) (cloudimg)
2710f48b612SMuminul Islam- [Ubuntu Focal](https://cloud-images.ubuntu.com/focal/current/) (cloudimg)
272328e950aSRob Bradford- [Ubuntu Groovy](https://cloud-images.ubuntu.com/groovy/current/) (cloudimg)
273328e950aSRob Bradford- [Ubuntu Hirsute](https://cloud-images.ubuntu.com/hirsute/current/) (cloudimg)
2741e97d141SRob Bradford
275ce635381SRob BradfordDirect kernel boot to userspace should work with a rootfs from most distributions.
276919226f3SSamuel Ortiz
2776444e29bSRob Bradford## Hot Plug
2786444e29bSRob Bradford
27937a2c13aSAlyssa RossCloud Hypervisor supports hotplug of CPUs, passthrough devices (VFIO), `virtio-{net,block,pmem,fs,vsock}` and memory resizing. This [document](docs/hotplug.md) details how to add devices to
280ce635381SRob Bradforda running VM.
2816444e29bSRob Bradford
282b55d75eaSSebastien Boeuf## Device Model
283b55d75eaSSebastien Boeuf
28437a2c13aSAlyssa RossDetails of the device model can be found in this [documentation](docs/device_model.md).
285b55d75eaSSebastien Boeuf
286919226f3SSamuel Ortiz## TODO
287919226f3SSamuel Ortiz
28898bce5e0SRob BradfordWe are not tracking the Cloud Hypervisor TODO list from a specific git tracked file but through
2898ec89bc8SRob Bradford[github issues](https://github.com/cloud-hypervisor/cloud-hypervisor/issues/new) instead.
290919226f3SSamuel Ortiz
291919226f3SSamuel Ortiz# 4. `rust-vmm` project dependency
292919226f3SSamuel Ortiz
293919226f3SSamuel OrtizIn order to satisfy the design goal of having a high-performance, security-focused hypervisor the decision
294919226f3SSamuel Ortizwas made to use the [Rust](https://www.rust-lang.org/) programming language.
2958589d3f9SRob BradfordThe language's strong focus on memory and thread safety makes it an ideal candidate for implementing VMMs.
296919226f3SSamuel Ortiz
29798bce5e0SRob BradfordInstead of implementing the VMM components from scratch, Cloud Hypervisor is importing the [rust-vmm](https://github.com/rust-vmm)
298919226f3SSamuel Ortizcrates, and sharing code and architecture together with other VMMs like e.g. Amazon's [Firecracker](https://firecracker-microvm.github.io/)
299919226f3SSamuel Ortizand Google's [crosvm](https://chromium.googlesource.com/chromiumos/platform/crosvm/).
300919226f3SSamuel Ortiz
30198bce5e0SRob BradfordCloud Hypervisor embraces the rust-vmm project goals, which is to be able to share and re-use
30298bce5e0SRob Bradfordas many virtualization crates as possible. As such, the Cloud Hypervisor relationship with the rust-vmm
303919226f3SSamuel Ortizproject is twofold:
304919226f3SSamuel Ortiz
305919226f3SSamuel Ortiz1. It will use as much of the rust-vmm code as possible. Any new rust-vmm crate that's relevant to the project
306919226f3SSamuel Ortiz   goals will be integrated as soon as possible.
30798bce5e0SRob Bradford2. As it is likely that the rust-vmm project will lack some of the features that Cloud Hypervisor needs (e.g. ACPI,
30898bce5e0SRob Bradford   VFIO, vhost-user, etc), we will be using the Cloud Hypervisor VMM to implement and test them, and contribute them
309919226f3SSamuel Ortiz   back to the rust-vmm project.
310919226f3SSamuel Ortiz
311919226f3SSamuel Ortiz## Firecracker and crosvm
312919226f3SSamuel Ortiz
31398bce5e0SRob BradfordA large part of the Cloud Hypervisor code is based on either the Firecracker or the crosvm projects implementations.
314919226f3SSamuel OrtizBoth of these are VMMs written in Rust with a focus on safety and security, like Cloud Hypervisor.
315919226f3SSamuel Ortiz
316919226f3SSamuel OrtizHowever we want to emphasize that the Cloud Hypervisor project is neither a fork nor a reimplementation of any of those
317919226f3SSamuel Ortizprojects. The goals and use cases we're trying to meet are different.
318919226f3SSamuel OrtizWe're aiming at supporting cloud workloads, i.e. those modern, full Linux distribution images currently being run by
319919226f3SSamuel OrtizCloud Service Provider (CSP) tenants.
320919226f3SSamuel Ortiz
321919226f3SSamuel OrtizOur primary target is not to support client or serverless use cases, and as such our code base already diverges
322919226f3SSamuel Ortizfrom the crosvm and Firecracker ones. As we add more features to support our use cases, we believe that the divergence
323919226f3SSamuel Ortizwill increase while at the same time sharing as much of the fundamental virtualization code through the rust-vmm project
324919226f3SSamuel Ortizcrates as possible.
325919226f3SSamuel Ortiz
326919226f3SSamuel Ortiz# 5. Community
327919226f3SSamuel Ortiz
3287bfe87b7SSamuel OrtizThe Cloud Hypervisor project follows the governance, and community guidelines described in
3297bfe87b7SSamuel Ortizthe [Community](https://github.com/cloud-hypervisor/community) repository.
3307bfe87b7SSamuel Ortiz
3317bfe87b7SSamuel Ortiz## Contribute
3327bfe87b7SSamuel Ortiz
333919226f3SSamuel OrtizWe are working on building a global, diverse and collaborative community around the Cloud Hypervisor project.
334919226f3SSamuel OrtizAnyone who is interested in [contributing](CONTRIBUTING.md) to the project is welcome to participate.
335919226f3SSamuel Ortiz
336919226f3SSamuel OrtizWe believe that contributing to a open source project like Cloud Hypervisor covers a lot more than just sending
337919226f3SSamuel Ortizcode. Testing, documentation, pull request reviews, bug reports, feature requests, project improvement suggestions,
338919226f3SSamuel Ortizetc, are all equal and welcome means of contribution. See the [CONTRIBUTING](CONTRIBUTING.md) document for more details.
339919226f3SSamuel Ortiz
340919226f3SSamuel Ortiz## Join us
341919226f3SSamuel Ortiz
3422e0f1c2aSSamuel OrtizGet an [invite to our Slack channel](https://join.slack.com/t/cloud-hypervisor/shared_invite/enQtNjY3MTE3MDkwNDQ4LWQ1MTA1ZDVmODkwMWQ1MTRhYzk4ZGNlN2UwNTI3ZmFlODU0OTcwOWZjMTkwZDExYWE3YjFmNzgzY2FmNDAyMjI)
343919226f3SSamuel Ortizand [join us on Slack](https://cloud-hypervisor.slack.com/).
34437e27842SRob Bradford
34537e27842SRob Bradford## Security issues
34637e27842SRob Bradford
34737e27842SRob BradfordPlease use the GitHub security advisories feature for reporting issues: https://github.com/cloud-hypervisor/cloud-hypervisor/security/advisories/new
348