Some things in Nanos are set in stone and others are not. In general security and performance are top of mind and we abide by KISS principles. This site is a WIP (work in progress).
The filesystem currently used by Nanos is TFS. Nanos isn't opposed to other file systems but hasn't
identified a large need yet either. As with most of these sections if your team requires different
filesystem support please reach out to the NanoVMs team for a support subscription.
For more info on the TFS filesystem.
Nanos supports both IPV4 and IPV6 currently.
Not a lot of benchmarking and tuning has been done yet, however, there is plenty of potential. Currently, our naive tests can push 2X the amount of requests/second for Go webservers. This website is hosted on a Go webserver running a recent 0.1.27 version of Nanos.
Nanos has an opionated view of security. Users and their associated permissions are not supported. Nanos is
also a single process (but multi-threaded) system. This means there is no support for SSH, shells or any
other interactive multiple command/program running. While this prevents quite a few security issues extra
precaution should be taken for things such as RFI style attacks. For instance you wouldn't want to leak your
SSL private key or database credentials.
Similarily, just cause you can't create a new process doesn't mean an attacker couldn't inject their process.
Nanos employs various forms of security measures found in other general purpose operating systems including ASLR and respects page protections that compilers produce.
Nanos, unlike other general purpose operating systems, only provision what is necessary on the filesystem to run an application so most filesystems will have a few to maybe 10 libraries and many applications might have filesystems with only a handful of files on them.
Nanos's kernel lives on a different partition and is separated from the user-viewable partition. Nanos goes further with the idea of exec protection with an optional exec_protection flag available in the manifest. When this is enabled the application cannot modify the executable files and cannot create new executable files. For further information check out this PR.
For more info: more info
Currently Nanos only targets X86-64.
ARM64 work is being actively worked on right now.
RISC-V has been asked for but so far there is no roadmap for it. If you are interested in getting that sooner reach out to the NanoVMs team.
Nanos can currently deploy to the following public cloud providers:
→ Google Cloud
→ Amazon Web Services
→ Digital Ocean
→ Microsoft Azure
Nanos can also deploy to the following hypervisors:
Nanos can even run on K8S.
→ -d strace
→ http server dump
➜ ~ ~/.ops/0.1.27/mkfs -help /Users/eyberg/.ops/0.1.27/mkfs: illegal option -- h Usage: mkfs [options] image-file < manifest-file mkfs [options] -e image-file Options: -b boot-image - specify boot image to prepend -k kern-image - specify kernel image -r target-root - specify target root -s image-size - specify minimum image file size; can be expressed in bytes, KB (with k or K suffix), MB (with m or M suffix), and GB (with g or G suffix) -e - create empty filesystem
➜ ~ ~/.ops/0.1.27/dump Usage: dump [OPTION]...
Options: -d Copy filesystem contents from into -t Display filesystem from as a tree
The nanos manifest is an extremely powerful tool as it comes with many different flags and is the synthesis
of a filesystem merged with various settings. Most users will never craft their own manifests by hand,
opting to use OPS to craft it automatically.