xref: /cloud-hypervisor/README.md (revision 8b8daf571ae66d4546705d3e941f3a102a4ad679)
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)
7*8b8daf57SRob Bradford  - [Preparation](#preparation)
802f2eceeSRob Bradford  - [Install prerequisites](#install-prerequisites)
95d535853SRob Bradford  - [Clone and build](#clone-and-build)
105d535853SRob Bradford    - [Containerized builds and tests](#containerized-builds-and-tests)
115d535853SRob Bradford  - [Run](#run)
125d535853SRob Bradford    - [Cloud image](#cloud-image)
135d535853SRob Bradford    - [Custom kernel and disk image](#custom-kernel-and-disk-image)
14919226f3SSamuel Ortiz      - [Building your kernel](#building-your-kernel)
15919226f3SSamuel Ortiz      - [Disk image](#disk-image)
16919226f3SSamuel Ortiz      - [Booting the guest VM](#booting-the-guest-vm)
175d535853SRob Bradford- [3. Status](#3-status)
185d535853SRob Bradford  - [Hot Plug](#hot-plug)
195d535853SRob Bradford  - [Device Model](#device-model)
205d535853SRob Bradford  - [TODO](#todo)
215d535853SRob Bradford- [4. `rust-vmm` project dependency](#4-rust-vmm-project-dependency)
225d535853SRob Bradford  - [Firecracker and crosvm](#firecracker-and-crosvm)
235d535853SRob Bradford- [5. Community](#5-community)
245d535853SRob Bradford  - [Contribute](#contribute)
255d535853SRob Bradford  - [Join us](#join-us)
2602f2eceeSRob Bradford  - [Security issues](#security-issues)
27919226f3SSamuel Ortiz
28919226f3SSamuel Ortiz# 1. What is Cloud Hypervisor?
29919226f3SSamuel Ortiz
30328e950aSRob 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 .
31328e950aSRob Bradford
32919226f3SSamuel OrtizThe project focuses on exclusively running modern, cloud workloads, on top of a limited set of hardware architectures and platforms.
3355069081SRob 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.
34919226f3SSamuel Ortiz
35919226f3SSamuel OrtizCloud Hypervisor is implemented in [Rust](https://www.rust-lang.org/) and is based on the [rust-vmm](https://github.com/rust-vmm) crates.
36919226f3SSamuel Ortiz
37919226f3SSamuel Ortiz## Objectives
38919226f3SSamuel Ortiz
39919226f3SSamuel Ortiz### High Level
40919226f3SSamuel Ortiz
41328e950aSRob Bradford- Runs on KVM or MSHV
420f48b612SMuminul Islam- Minimal emulation
430f48b612SMuminul Islam- Low latency
440f48b612SMuminul Islam- Low memory footprint
450f48b612SMuminul Islam- Low complexity
460f48b612SMuminul Islam- High performance
470f48b612SMuminul Islam- Small attack surface
480f48b612SMuminul Islam- 64-bit support only
490f48b612SMuminul Islam- CPU, memory, PCI hotplug
500f48b612SMuminul Islam- Machine to machine migration
51919226f3SSamuel Ortiz
52919226f3SSamuel Ortiz### Architectures
53919226f3SSamuel Ortiz
54d2741fdcSpierwillCloud 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)).
55919226f3SSamuel Ortiz
56919226f3SSamuel Ortiz### Guest OS
57919226f3SSamuel Ortiz
58328e950aSRob BradfordCloud Hypervisor supports `64-bit Linux` and Windows 10/Windows Server 2019.
59919226f3SSamuel Ortiz
60919226f3SSamuel Ortiz# 2. Getting Started
61919226f3SSamuel Ortiz
628f4de459SHenry WangBelow sections describe how to build and run Cloud Hypervisor on the `x86_64`
638f4de459SHenry Wangplatform. For getting started on the `AArch64` platform, please refer to the
648f4de459SHenry Wang[Arm64 documentation](docs/arm64.md).
658f4de459SHenry Wang
668f4de459SHenry Wang## Preparation
678f4de459SHenry Wang
68919226f3SSamuel OrtizWe create a folder to build and run `cloud-hypervisor` at `$HOME/cloud-hypervisor`
69919226f3SSamuel Ortiz
70919226f3SSamuel Ortiz```shell
71919226f3SSamuel Ortiz$ export CLOUDH=$HOME/cloud-hypervisor
72919226f3SSamuel Ortiz$ mkdir $CLOUDH
73919226f3SSamuel Ortiz```
74919226f3SSamuel Ortiz
75029a6d8aSMuminul Islam## Install prerequisites
76029a6d8aSMuminul Islam
77029a6d8aSMuminul IslamYou need to install some prerequisite packages in order to build and test Cloud Hypervisor.
78029a6d8aSMuminul IslamHere, all the steps are based on Ubuntu, for other Linux distributions please replace the
79029a6d8aSMuminul Islampackage manager and package name.
80029a6d8aSMuminul Islam
81029a6d8aSMuminul Islam```shell
82029a6d8aSMuminul Islam# Install git
83029a6d8aSMuminul Islam$ sudo apt install git
84029a6d8aSMuminul Islam# Install rust tool chain
85029a6d8aSMuminul Islam$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
86029a6d8aSMuminul Islam# Install build-essential
87029a6d8aSMuminul Islam$ sudo apt install build-essential
88029a6d8aSMuminul Islam# If you want to build statically linked binary please add musl target
89029a6d8aSMuminul Islam$ rustup target add x86_64-unknown-linux-musl
90029a6d8aSMuminul Islam```
91029a6d8aSMuminul Islam
92919226f3SSamuel Ortiz## Clone and build
93919226f3SSamuel Ortiz
94919226f3SSamuel OrtizFirst you need to clone and build the cloud-hypervisor repo:
95919226f3SSamuel Ortiz
96919226f3SSamuel Ortiz```shell
97919226f3SSamuel Ortiz$ pushd $CLOUDH
988ec89bc8SRob Bradford$ git clone https://github.com/cloud-hypervisor/cloud-hypervisor.git
99919226f3SSamuel Ortiz$ cd cloud-hypervisor
100919226f3SSamuel Ortiz$ cargo build --release
101919226f3SSamuel Ortiz
102919226f3SSamuel Ortiz# We need to give the cloud-hypervisor binary the NET_ADMIN capabilities for it to set TAP interfaces up on the host.
103919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./target/release/cloud-hypervisor
104919226f3SSamuel Ortiz
105029a6d8aSMuminul Islam# If you want to build statically linked binary
106029a6d8aSMuminul Islam$ cargo build --release --target=x86_64-unknown-linux-musl --all
107919226f3SSamuel Ortiz$ popd
108919226f3SSamuel Ortiz```
109919226f3SSamuel Ortiz
110919226f3SSamuel OrtizThis will build a `cloud-hypervisor` binary under `$CLOUDH/cloud-hypervisor/target/release/cloud-hypervisor`.
111919226f3SSamuel Ortiz
1128676759cSSamuel Ortiz### Containerized builds and tests
1138676759cSSamuel Ortiz
1148676759cSSamuel OrtizIf you want to build and test Cloud Hypervisor without having to install all the
1158676759cSSamuel Ortizrequired dependencies (The rust toolchain, cargo tools, etc), you can also use
1168676759cSSamuel OrtizCloud Hypervisor's development script: `dev_cli.sh`. Please note that upon its
1178676759cSSamuel Ortizfirst invocation, this script will pull a fairly large container image.
1188676759cSSamuel Ortiz
1198676759cSSamuel OrtizFor example, to build the Cloud Hypervisor release binary:
1208676759cSSamuel Ortiz
1218676759cSSamuel Ortiz```shell
1228676759cSSamuel Ortiz$ pushd $CLOUDH
1238676759cSSamuel Ortiz$ cd cloud-hypervisor
1248676759cSSamuel Ortiz$ ./scripts/dev_cli.sh build --release
1258676759cSSamuel Ortiz```
1268676759cSSamuel Ortiz
1278676759cSSamuel OrtizWith `dev_cli.sh`, one can also run the Cloud Hypervisor CI locally. This can be
1288676759cSSamuel Ortizvery convenient for debugging CI errors without having to fully rely on the
1298676759cSSamuel OrtizCloud Hypervisor CI infrastructure.
1308676759cSSamuel Ortiz
1318676759cSSamuel OrtizFor example, to run the Cloud Hypervisor unit tests:
1328676759cSSamuel Ortiz
1338676759cSSamuel Ortiz```shell
1343bf46d4cSBo Chen$ ./scripts/dev_cli.sh tests --unit
1358676759cSSamuel Ortiz```
1368676759cSSamuel Ortiz
1378676759cSSamuel OrtizRun the `./scripts/dev_cli.sh --help` command to view all the supported
1388676759cSSamuel Ortizdevelopment script commands and their related options.
1398676759cSSamuel Ortiz
140919226f3SSamuel Ortiz## Run
141919226f3SSamuel Ortiz
142919226f3SSamuel OrtizYou can run a guest VM by either using an existing cloud image or booting into your own kernel and disk image.
143919226f3SSamuel Ortiz
144919226f3SSamuel Ortiz### Cloud image
145919226f3SSamuel Ortiz
14698bce5e0SRob BradfordCloud Hypervisor supports booting disk images containing all needed
1479900daacSRob Bradfordcomponents to run cloud workloads, a.k.a. cloud images. To do that we rely on
1489900daacSRob Bradfordthe [Rust Hypervisor
1498ec89bc8SRob BradfordFirmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware) project to provide
1509900daacSRob Bradfordan ELF
151919226f3SSamuel Ortizformatted KVM firmware for `cloud-hypervisor` to directly boot into.
152919226f3SSamuel Ortiz
153a3342bdbSSebastien BoeufWe need to get the latest `rust-hypervisor-firmware` release and also a working cloud image. Here we will use a Ubuntu image:
154919226f3SSamuel Ortiz
155919226f3SSamuel Ortiz```shell
156919226f3SSamuel Ortiz$ pushd $CLOUDH
157a3342bdbSSebastien Boeuf$ wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
158a3342bdbSSebastien Boeuf$ qemu-img convert -p -f qcow2 -O raw focal-server-cloudimg-amd64.img focal-server-cloudimg-amd64.raw
1595bcbd560SRob Bradford$ wget https://github.com/cloud-hypervisor/rust-hypervisor-firmware/releases/download/0.3.2/hypervisor-fw
160919226f3SSamuel Ortiz$ popd
161919226f3SSamuel Ortiz```
162919226f3SSamuel Ortiz
163919226f3SSamuel Ortiz```shell
164919226f3SSamuel Ortiz$ pushd $CLOUDH
165919226f3SSamuel Ortiz$ sudo setcap cap_net_admin+ep ./cloud-hypervisor/target/release/cloud-hypervisor
166919226f3SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
167919226f3SSamuel Ortiz	--kernel ./hypervisor-fw \
168a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
169e8e21aebSSamuel Ortiz	--cpus boot=4 \
17000df79a5SSamuel Ortiz	--memory size=1024M \
171617b568fSMuminul Islam	--net "tap=,mac=,ip=,mask="
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
18907756aa8SRob Bradford$ git clone --depth 1 https://github.com/cloud-hypervisor/linux.git -b ch-5.15.12 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
194*8b8daf57SRob Bradford$ KCFLAGS="-Wa,-mx86-used-note=no" 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 \
225617b568fSMuminul Islam	--net "tap=,mac=,ip=,mask="
22646eaea16SSamuel Ortiz```
22746eaea16SSamuel Ortiz
22846eaea16SSamuel OrtizThe above example use the `virtio-console` device as the guest console, and this
22946eaea16SSamuel Ortizdevice may not be enabled soon enough by the guest kernel to get early kernel
23046eaea16SSamuel Ortizdebug messages.
23146eaea16SSamuel Ortiz
23246eaea16SSamuel OrtizWhen in need for earlier debug messages, using the legacy serial device based
23346eaea16SSamuel Ortizconsole is preferred:
23446eaea16SSamuel Ortiz
23546eaea16SSamuel Ortiz```
23646eaea16SSamuel Ortiz$ ./cloud-hypervisor/target/release/cloud-hypervisor \
23746eaea16SSamuel Ortiz	--kernel ./linux-cloud-hypervisor/arch/x86/boot/compressed/vmlinux.bin \
23846eaea16SSamuel Ortiz	--console off \
23946eaea16SSamuel Ortiz	--serial tty \
240a3342bdbSSebastien Boeuf	--disk path=focal-server-cloudimg-amd64.raw \
241a3342bdbSSebastien Boeuf	--cmdline "console=ttyS0 root=/dev/vda1 rw" \
242e8e21aebSSamuel Ortiz	--cpus boot=4 \
24300df79a5SSamuel Ortiz	--memory size=1024M \
244617b568fSMuminul Islam	--net "tap=,mac=,ip=,mask="
245919226f3SSamuel Ortiz```
246919226f3SSamuel Ortiz
247919226f3SSamuel Ortiz# 3. Status
248919226f3SSamuel Ortiz
249328e950aSRob BradfordCloud Hypervisor is under active development. The following stability guarantees are currently made:
250919226f3SSamuel Ortiz
251328e950aSRob Bradford* The API (including command line options) will not be removed or changed in a
252328e950aSRob Bradford  breaking way without a minimum of 2 releases notice. Where possible warnings
253328e950aSRob Bradford  will be given about the use of deprecated functionality and the deprecations
254328e950aSRob Bradford  will be documented in the release notes.
255328e950aSRob Bradford* Point releases will be made between individual releases where there are
256328e950aSRob Bradford  substantial bug fixes or security issues that need to be fixed.
257328e950aSRob Bradford
258328e950aSRob BradfordCurrently the following items are **not** guaranteed across updates:
259328e950aSRob Bradford
260328e950aSRob Bradford* Snapshot/restore is not supported across different versions
261328e950aSRob Bradford* Live migration is not supported across different versions
262328e950aSRob Bradford* The following features are considered experimental and may change
263328e950aSRob Bradford  substantially between releases: TDX, SGX.
264328e950aSRob Bradford
265328e950aSRob Bradford
266328e950aSRob BradfordAs of 2021-04-29, the following cloud images are supported:
2670f48b612SMuminul Islam
2680f48b612SMuminul Islam- [Ubuntu Bionic](https://cloud-images.ubuntu.com/bionic/current/) (cloudimg)
2690f48b612SMuminul Islam- [Ubuntu Focal](https://cloud-images.ubuntu.com/focal/current/) (cloudimg)
270328e950aSRob Bradford- [Ubuntu Groovy](https://cloud-images.ubuntu.com/groovy/current/) (cloudimg)
271328e950aSRob Bradford- [Ubuntu Hirsute](https://cloud-images.ubuntu.com/hirsute/current/) (cloudimg)
2721e97d141SRob Bradford
273ce635381SRob BradfordDirect kernel boot to userspace should work with a rootfs from most distributions.
274919226f3SSamuel Ortiz
2756444e29bSRob Bradford## Hot Plug
2766444e29bSRob Bradford
27737a2c13aSAlyssa 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
278ce635381SRob Bradforda running VM.
2796444e29bSRob Bradford
280b55d75eaSSebastien Boeuf## Device Model
281b55d75eaSSebastien Boeuf
28237a2c13aSAlyssa RossDetails of the device model can be found in this [documentation](docs/device_model.md).
283b55d75eaSSebastien Boeuf
284919226f3SSamuel Ortiz## TODO
285919226f3SSamuel Ortiz
28698bce5e0SRob BradfordWe are not tracking the Cloud Hypervisor TODO list from a specific git tracked file but through
2878ec89bc8SRob Bradford[github issues](https://github.com/cloud-hypervisor/cloud-hypervisor/issues/new) instead.
288919226f3SSamuel Ortiz
289919226f3SSamuel Ortiz# 4. `rust-vmm` project dependency
290919226f3SSamuel Ortiz
291919226f3SSamuel OrtizIn order to satisfy the design goal of having a high-performance, security-focused hypervisor the decision
292919226f3SSamuel Ortizwas made to use the [Rust](https://www.rust-lang.org/) programming language.
2938589d3f9SRob BradfordThe language's strong focus on memory and thread safety makes it an ideal candidate for implementing VMMs.
294919226f3SSamuel Ortiz
29598bce5e0SRob BradfordInstead of implementing the VMM components from scratch, Cloud Hypervisor is importing the [rust-vmm](https://github.com/rust-vmm)
296919226f3SSamuel Ortizcrates, and sharing code and architecture together with other VMMs like e.g. Amazon's [Firecracker](https://firecracker-microvm.github.io/)
297919226f3SSamuel Ortizand Google's [crosvm](https://chromium.googlesource.com/chromiumos/platform/crosvm/).
298919226f3SSamuel Ortiz
29998bce5e0SRob BradfordCloud Hypervisor embraces the rust-vmm project goals, which is to be able to share and re-use
30098bce5e0SRob Bradfordas many virtualization crates as possible. As such, the Cloud Hypervisor relationship with the rust-vmm
301919226f3SSamuel Ortizproject is twofold:
302919226f3SSamuel Ortiz
303919226f3SSamuel Ortiz1. It will use as much of the rust-vmm code as possible. Any new rust-vmm crate that's relevant to the project
304919226f3SSamuel Ortiz   goals will be integrated as soon as possible.
30598bce5e0SRob Bradford2. As it is likely that the rust-vmm project will lack some of the features that Cloud Hypervisor needs (e.g. ACPI,
30698bce5e0SRob Bradford   VFIO, vhost-user, etc), we will be using the Cloud Hypervisor VMM to implement and test them, and contribute them
307919226f3SSamuel Ortiz   back to the rust-vmm project.
308919226f3SSamuel Ortiz
309919226f3SSamuel Ortiz## Firecracker and crosvm
310919226f3SSamuel Ortiz
31198bce5e0SRob BradfordA large part of the Cloud Hypervisor code is based on either the Firecracker or the crosvm projects implementations.
312919226f3SSamuel OrtizBoth of these are VMMs written in Rust with a focus on safety and security, like Cloud Hypervisor.
313919226f3SSamuel Ortiz
314919226f3SSamuel OrtizHowever we want to emphasize that the Cloud Hypervisor project is neither a fork nor a reimplementation of any of those
315919226f3SSamuel Ortizprojects. The goals and use cases we're trying to meet are different.
316919226f3SSamuel OrtizWe're aiming at supporting cloud workloads, i.e. those modern, full Linux distribution images currently being run by
317919226f3SSamuel OrtizCloud Service Provider (CSP) tenants.
318919226f3SSamuel Ortiz
319919226f3SSamuel OrtizOur primary target is not to support client or serverless use cases, and as such our code base already diverges
320919226f3SSamuel Ortizfrom the crosvm and Firecracker ones. As we add more features to support our use cases, we believe that the divergence
321919226f3SSamuel Ortizwill increase while at the same time sharing as much of the fundamental virtualization code through the rust-vmm project
322919226f3SSamuel Ortizcrates as possible.
323919226f3SSamuel Ortiz
324919226f3SSamuel Ortiz# 5. Community
325919226f3SSamuel Ortiz
3267bfe87b7SSamuel OrtizThe Cloud Hypervisor project follows the governance, and community guidelines described in
3277bfe87b7SSamuel Ortizthe [Community](https://github.com/cloud-hypervisor/community) repository.
3287bfe87b7SSamuel Ortiz
3297bfe87b7SSamuel Ortiz## Contribute
3307bfe87b7SSamuel Ortiz
331919226f3SSamuel OrtizWe are working on building a global, diverse and collaborative community around the Cloud Hypervisor project.
332919226f3SSamuel OrtizAnyone who is interested in [contributing](CONTRIBUTING.md) to the project is welcome to participate.
333919226f3SSamuel Ortiz
334919226f3SSamuel OrtizWe believe that contributing to a open source project like Cloud Hypervisor covers a lot more than just sending
335919226f3SSamuel Ortizcode. Testing, documentation, pull request reviews, bug reports, feature requests, project improvement suggestions,
336919226f3SSamuel Ortizetc, are all equal and welcome means of contribution. See the [CONTRIBUTING](CONTRIBUTING.md) document for more details.
337919226f3SSamuel Ortiz
338919226f3SSamuel Ortiz## Join us
339919226f3SSamuel Ortiz
3402e0f1c2aSSamuel OrtizGet an [invite to our Slack channel](https://join.slack.com/t/cloud-hypervisor/shared_invite/enQtNjY3MTE3MDkwNDQ4LWQ1MTA1ZDVmODkwMWQ1MTRhYzk4ZGNlN2UwNTI3ZmFlODU0OTcwOWZjMTkwZDExYWE3YjFmNzgzY2FmNDAyMjI)
341919226f3SSamuel Ortizand [join us on Slack](https://cloud-hypervisor.slack.com/).
34237e27842SRob Bradford
34337e27842SRob Bradford## Security issues
34437e27842SRob Bradford
34537e27842SRob BradfordPlease use the GitHub security advisories feature for reporting issues: https://github.com/cloud-hypervisor/cloud-hypervisor/security/advisories/new
346