Releases: cloudius-systems/osv
Release 0.57.0 "Magpie"
Highlights
This new release brings many new and exciting features and improvements including:
- New build mode to hide the non-glibc symbols and
libstdc++
- ZFS code extracted out of the kernel in form of a dynamically linked library
libsolaris.so
- Build mode intended to tailor the kernel to a set of specific device drivers - driver profiles
- Mechanism to build a version of the kernel with a subset of glibc symbols needed to support a specific application
- Experimental lazy stack support
- Major improvements to building and running ZFS images
- Major improvements to the aarch64 port like dedicated exception stack and support to handle system calls and signals
- Support new system calls
- Support the
SO_REUSE_PORT
socket option - Minimal
rnetlink
support - Various VFS enhancements
Enhancements and Improvements in Detail
- Hide most symbols and standard C++ library
- hide most symbols using
-fvisibility=hidden
and expose the public ones using(__visibility__("default"))
- 2df8652, 317d259 - add lists of exported symbols
- add option to build kernel with most symbols hidden - af2d371
- enable garbage collection of code and data when hiding symbols - 730fd82
- hide most symbols using
- Improve modularity
- Driver Profiles
- support driver profiles - ffb91b1
- App-specific kernel
- support app version script - d19ccb1
- Enhance networking stack
- Aarch64 enhancements
- Improve building and running ZFS images
- New syscalls
- Netlink support
- VFS improvements
- Sysfs improvements
- add new OSv specific pseudo file
/sys/osv/memory/linear_maps
- 2847b2a
- add new OSv specific pseudo file
- Libc improvements
- Lazy stack support
- inline assembly to pre-fault stack - f5684d9
- do nothing in kernel threads and on populated stack - fabacc4
- ensure next stack page statically - 9b1e9b0
- ensure next stack page dynamically if preemption enabled - 7c9c4c3
- ensure next stack page conditionally if interrupts and preemption enabled - 5250512
- prevent deadlock when taking vma_list_mutex for write - 9fb4574
- activate lazy stack in pthreads - d6aacab
- new tracepoint for stack pre-faults - c8cdbde
- Support building on Fedora 36
- Scripts/tooling improvements
- New apps/runtimes supported
Acknowledgments
We want to thank all contributors to the project. But the special thanks go to:
- Nadav Har’El for contributing and reviewing many patches and providing guidance for many others
- Waldemar Kozaczuk for contributing most patches
Closed Issues
- #1200 Mounting ZFS filesystem from arbitrary device and partition
- #1198 OSv fails to build on Fedora 36
- #1196 Proposal to change virtual memory layout
- #1195 aarch64: crashes when enabling tracepoint sched_switch
- #1190 Crash in the FreeBSD networking stack code caused by likely bug in reference counting logic
- #1189 aarch64: atomic_fetchadd_int() and atomic_fetchadd_long() in machine/atomic.h sometimes yield incorrect results
- #1188 Was trying to build and run the distributed file system called SeaWeedFS.
- #1185 Strange application behaviour difference between host and unikernel
- #1183 Please mention that OSv is open-source on your front page documentation
- #1182 Please host the source code of your website on github
- #1181 Please enable HTTPS on osv.io documentation
- #1180 Assertion failure when reading 2048 bytes from block device
- #1177 Test failure in tracing_smoke_test
- #1176 Gdb "osv info threads" doesn't work on Fedora 34
- #1175 Test failure on Fedora 34 because of gdb script failure
- #1172 No rules to make target 'osv.vmdk'.
- #1170 Implement Linux version of SO_REUSEPORT
- #1166 Revamp/improve building of Lua module
- #1165 creating temporary files takes a long time on Java 11
- #1160 virtio: cloud-hypervisor report warnings in virtio-code
- #1158 aarch64: tst-sampler.cc crashes sometimes in SMP mode
- #1157 aarch64: openjdk11 crashed on OSv in JIT mode
- #1156 aarch64: implement system call assembly instruction svc
- #1155 aarch64: consider implementing dedicated stacks like on x64
- #1154 aarch64: implement signal handler
- #1153 tst-mmap.cc hangs on aarch64
- #1152 tst-elf-permissions.cc fails on aarch64
- #1151 tst-sigaltstack.so fails on aarch64
- #1145 aarch64: openjdk8 crashed on OSv
- #1135 mmap() should handle collisions with areas mapped with mmu::linear_map()
- #1131 aarch64: ZFS image crashes due to a page fault caused by enabled access flag
- #1119 Missing mkdirat() function and syscall
- #1116 better handle exceptions thrown by dynamic linker
- #1110 Modularization/"Librarization" - create toolchain to optionally build custom kernel tailored to specific hypervisor or app
- #1096 Bugs in if_nametoindex/if_indextoname bug
- #1087 aarch64: dynamically map kernel code in early boot
- #1082 Build process can't find Lua libraries
- #1068 Building a full OSv image without running it
- #1009 Make ZFS optional as a shared library
- #97 Be more selective on symbols exported from the kernel
Release 0.56.0 "Nightingale"
This new release brings new modern version of musl (1.1.24), greatly improved support of aarch64 architecture and many improvements of Virtio-FS including DAX window support to speed-up read I/O.
Highlights
- Musl
- Upgraded from 0.9.12 to 1.1.24
- Added new Bionic unit tests
- AArch64
- Added Cadence UART driver
- Added support to compile kernel natively on aarch64 host
- Added support to cross-compile kernel on x64 Ubuntu and CentOS 7
- Added support to build modules
- Implemented mmio serial console for Firecracker
- Added floating-point support
- Supports ROFS
- Greatly improved debugging
- Fixed debug build which involved implementing context switch logic in assembly
- Got most unit tests to pass
- Added support of static TLS (Thread Local Storage)
- Implemented PL031 driver
- Added support of Virtio-FS
- Improved SMP support (#vCPUs >= 2)
- Tested on QEMU in TCG mode (full emulation)
- Tested on QEMU and Firecracker with KVM on real ARM hardware - Raspberry PI 4 and Odroid N2 Plus
- Tested many new apps:
- nginx
- rust examples
- java 11
- graalvm
- python
- iperf
- ffmpeg
- node
- REST cli app
- lighttpd
- Virtio-FS
- Boots application from virtio-fs
- Implemented DAX
- Implemented
readdir
- Added support to build with GCC 10 and 11
- VFS
- Added
mkdirat
- Added
statx
- Added minimal
unlinkat
- Added
- Hypervisors
- Boots on Intel's cloud-hypervisor - see this Wiki for details
- Apps/runtimes
- Latest golang (1.15.x)
- nginx from host
Acknowledgments
We want to thank all contributors to the project. But the special thanks go to:
- Nadav Har’El for contributing and reviewing many patches and providing guidance for many others
- Fotis Xenakis for further improving Virtio-FS support (most notably DAX window)
- Stewart Hildebrand for making OSv boot on LYNX Secure hypervisor and fixing many AAarch64-related bugs
- Waldemar Kozaczuk for contributing most patches
Commits by Author
David Smith (1):
David Woodhouse (1):
Fotis Xenakis (29):
- docker: update default to ubuntu 20.04
- virtio-fs: update fuse protocol header
- virtio-fs: implement FUSE_INIT map_alignment field
- virtio-fs: add basic read using the DAX window
- virtio-fs: refactor driver / fs
- virtio-fs: implement dax window manager
- virtio-fs: use multiple dax mappings in filesystem
- virtio-fs: minor driver code improvements
- virtio-fs: fix lost wakeup in driver
- virtio-fs: fix allocation failure condition
- virtio-fs: expose FUSE reply length
- virtio-fs: use FUSE_OPENDIR and FUSE_RELEASEDIR
- virtio-fs: implement readdir
- virtio-fs: add error check in fs
- virtio-fs: use exclusive device ids
- vfs: homogenize mount_rofs_rootfs and mount_zfs_rootfs
- loader: add rootfs type command line option
- loader: add support for booting from virtio-fs
- scripts/build: don't exit when exporting files
- virtio: fix return type of get_driver_features()
- virtio-fs: set the VIRTIO_F_VERSION_1 feature bit
- scripts: add kernel command-line options to run.py
- scripts: enhance virtiofsd functionality in run.py
- virtio-fs: update fuse protocol header
- virtio-fs: make DAX manager testable
- tests: add DAX manager white-box unit tests
- loader: extend root fs auto-discovery
- fs: support d_off in readdir for all filesystems
- scripts: add virtio-fs DAX option to run.py
Inacio Klassmann (1):
Matthew Kenigsberg (1):
Nadav Har'El (23):
- libosv.so: fix warnings on truncated symbol names
- memset_base(): avoid warnings in stricter C++ compiler
- lzloader: fix memset() implementation
- setup.py: support Fedora 32
- Add new mechanism for function aliases - outside original source file
- syscall_to_function.h: simplify, and avoid C++20 extension
- scripts/setup.py: simplify Fedora's Lua requirement
- musl: fix __stdio_read.c to conform to new Musl
- Add test for fread() hang when reading from a directory
- fix compatibility features.h for Fedora 34
- Fix __cxa_finalize() signature
- bsd/sha2.c: fix mismatched signatures
- Fix warnings about misleading indentation
- xen: fix overread and overwrite bug
- Makefile: avoid warning in one Musl source file
- fs/vfs/main.cc: fix gcc 11 build error
- core/trace.cc: free aligned_alloc() with free()
- sched: free aligned_alloc() with free()
- core/mmu.cc: silence warning
- add __libc_single_threaded symbol
- scripts/setup.py: add Fedora 34
- tests: fix warning in tst-epoll.cc
- Implement statx() function
Punit Agrawal (3):
- scripts: Update script to download RPM packages
- Update boost library detection logic for cross compiling
- scripts/build: Simplify libgcc_s.so.1 detection
Robin Gögge (1):
Samuel Laberge (3):
- Make getpid() return non-zero number
- Fix kill tests for non-zero PID
- Reject executables with non-matching machine type
Shawn Barber (1):
Stewart Hildebrand (19):
- build: set arch in arg-parsing loop
- Add script to download aarch64 cross compiler toolchain
- aarch64: re-introduce dtb relocation
- aarch64: add function to get PSCI method from device tree
- aarch64: use PSCI method from device tree
- Introduce Cadence UART driver
- Cadence: initialize from device tree
- [Cadence: add barrier...
Release 0.55.0 "Stork"
This new release focuses on improving documentation, build system, and testing. It also introduces Travis-based CI/CD pipeline to publish artifacts to "nightly repo". In addition, it also adds many new features/improvements:
- preliminary virtio-fs support
- QEMU microvm machine support
- numerous improvements to dynamic linker including local-exec TLS
- kernel smaller by 300 K
- new HTTP monitoring API
- less memory utilization with ROFS
Highlights
- Revised existing documentation and added a new one
- Main README
- Dynamic Linker
- Memory Allocation
- Automated Testing Framework
- Building from host guide
- Improved build process
- Setup Travis-based CI/CD pipeline to automatically build and publish kernel and artifacts
- Setup process to publish OSv build docker images to docker hub
- Cleaned up build process by eliminating the "build from externals" mode
- Migrated python scripts to version 3
- Removed dependency on JDK to build the kernel
- Merged IPV6 code from Spirent into a new branch
- Removed the dependency on the boost program options library from kernel and utility apps which made kernel smaller by 300K
- Created Automated Testing Framework designed to run > 30 real apps, some of them under stress using
ab
orwrk
tools. - Improved dynamic linker
- Added local-exec TLS support
- Expose musl version of libc
- Handle RTLD_NEXT
- Added some bionic unit tests
- Resurrected aarch64 support
- Simple hello world app works now on QEMU and Raspberry PI 4 with KVM enabled
- Basic support in run.py
- Added support of QEMU microvm machine
- Added clock synchronization mechanism with host on KVM
- File system improvements
- ZFS improvements
- Can mount and modify OSv-build drive on a host and use it back on OSv
- NFS
- Changed filesystem driver to be a library
- ROFS
- Improved memory utilization by integrating with pagecache
- Virtio-FS
- Added preliminary support
- ZFS improvements
- Added new HTTP monitoring API module
New Apps
Closed Issues
- #352 - Thread-local storage doesn't work in PIE
- #743 - Stop using libraries and header files from external/
- #784 - realloc crashes with "page fault outside application"
- #820 - Add ability to build read-only version of httpserver-api module for monitoring purposes
- #854 - Allow non-contiguous malloc() when memory is fragmented
- #880 - Tomcat doesn't run on openjdk8-fedora
- #916 - scripts/loader.py is not python3 compatible
- #918 - Importing ZFS volume fails on OSv
- #975 - mysql cannot working with fs=ramfs
- #976 - Fix annoying warnings while building tests
- #980 - cpiod.so is much too big
- #1014 - Make kernel not to use boost program_options library
- #1015 - OSv guest's wall clock does not follow host's wall clock
- #1040 - Boost 1.69.0 on Fedora 30 contains hidden symbols
- #1044 - Test build with Travis CI
- #1045 - Delay processing PT_NOTE segments until all PT_LOAD segments are mmapped
- #1053 - httpserver should not use boost::program_options
- #1056 - Upgrade utility scripts to Python 3
- #1056 - Virtio-net: use large buffers when VIRTIO_NET_F_MRG_RXBUF is not negotiated
- #1065 - When relocating do not lookup STB_LOCAL symbols by name
- #1066 - Ignore ELF versioning table when object looks up symbols by name in itself (self-lookup)
- #1067 - Make symbols visible to the object itself from threads created by INIT functions
- #1070 - Running Linux apps compiled and linked against musl
- #1073 - Bugs in itimer::work()
- #1074 - Cannot run YCSB with Redis on OSV
- #1077 - malloc_usable_size of malloc_large returns incorrect value
- #1078 - Eliminate libnfs external module
Commits by Author
BassMatt (1):
Fotis Xenakis (9):
- pci: allow 64-bit BAR offsets
- pci: add batch capability discovery
- virtio-pci: discover shared memory regions
- virtio: expose shared memory regions
- virtio-fs: minor code improvements in driver
- virtio-fs: minor code improvements in filesystem
- virtio-fs: update fuse protocol header
- virtio-fs: add driver support for the DAX window
- docker: update default distros
Mason Davis (1):
Matthew Pabst (1):
Nadav Har'El (11):
- scripts/manifest_from_host.sh: write errors to stderr
- build: stop including libboost_program_options
- elf.cc: if Boost libraries aren't visible to applications, don't report them
- tests: fix warning in tst-mmap.cc
- tests: fix warning in tst-symlink
- tests: fix compilation warning in tests/tst-run.cc
- stdio: fix scanf bug
- submodules: cleanly remove unused submodules
- alarm(): fix crash when alarm is rearmed from alarm handler
- scripts/setup.py: fix Fedora package to python3
Waldemar Kozaczuk (158):
- Added patch/pull requests clarification to the main README
- options: implement light and simple alternative to boost program options
- loader: replace boost program_options with light options utility functions
- cpiod: reduce cpiod size by replacing boost program options with the custom light alternative
- httpserver: replace boost program_options with light options utility functions
- commands: remove program options
- tests: Add boost_system.so from externals to test manifest
- scripts: enhance build-capstan-mpm-packages
- scripts: make run.py behave correctly regardless where called from
- scripts: enhance tests/testing.py
- scripts: add automated testing framework
- scripts: tweaked compose_and_test_selected_apps to simplify building some golang test examples
- scripts: generate meta descriptor when creating kernel into capstan repo
- Support local-exec TLS access
- scripts: improved automated test scripts to explicitly report success
- firecracker: upgrade to the latest version 0.19.0 and enhance script to use api-less mode
- aarch64: make it build again
- firecracker: improve networking setup tools
- firecracker: enhance firecracker.py to save/restore terminal
- tests: enhance automated tests scripts to run on firecracker
- virtio-net: use large buffers when VIRTIO_NET_F_MRG_RXBUF is not negotiated
- libc: added __log2f_finite() alias
- tls: make local-exec tls aligned
- tls: parameterize static tls reservation
- procfs: implement /proc/self/exe
- virtio-mmio: do not pretend OSv implements version other than 2
- power down: cause triple fault if keyboard controller method did not work on non-acpi hypervisors
- [virtio: adjust ...
Release 0.54.0 "Dove"
This new release of OSv focuses on improving Linux compatibility and tooling aimed to make it possible to run unmodified Linux apps on OSv "as-is".
Overview
From the beginning, OSv was designed to implement a subset of Linux POSIX API superset. But until this release most Linux applications had to be re-compiled from source as shared libraries or some, like Java, rely on OSv version of /usr/bin/java
wrapper to run. This meant that one could NOT run a Linux executable "as is". In other words, OSv has always been Linux-compatible at source level but not at binary level.
This release offers a breakthrough and allows running unmodified Linux position-independent executables (so-called "pies") and position-dependant executables "as-is" as long as they do not use "fork/execve" or other unsupported Linux API. It means that very often one can take a binary from Linux host and run it on OSv without having to locate the source code on the Internet and build it as a shared library.
In addition, this release makes OSv more Linux-compatible from another end - booting on a hypervisor. The previous release 0.53 made OSv kernel "look like" ELF64 uncompressed Linux kernel. The new release 0.54 has enhanced OSv loader to "look like" vmlinuz and thus allow booting on Docker's Hyperkit on OSX. The OSv loader has also been enhanced to boot as Linux ELF64 PVH/HVM loader on QEMU with --kernel
option.
Highlights
Linux compatibility
- Applications
- Enhanced getopt family of functions to work correctly with both position-independent executables and position-dependent executables in order to allow receiving program arguments
- Enhanced dynamic linker to be capable of executing position-dependent executables
- Mapped kernel higher in virtual memory - from 0x00200000 to 0x40200000 (2nd GiB) in order to make space for position-dependent executables
- Added new GNU libc extensions:
error()
,__prognames
and__progname_full
- Added missing pseudo-files to procfs and minimal implementation of sysfs in order to support libnuma to allow programs like ffmpeg using x265 codec run on OSv "as-is"
- Encanced
/proc/self/maps
to include i-node number and device ID to support GraalVM apps with isolates - Enhanced
epoll_pwait()
implementation - Improved dynamic linker by making it:
- Ignore old version symbols so that new version symbols are resolved correctly instead
- Delay resolving symbols found missing during
relocate_rela()
phase for certain relocation types to allow more unmodified Linux executables run on OSv - Handle DT_RUNPATH
- Booting
- Added vmlinuz-compatible version of the kernel to allow OSv boot on Docker's Hyperkit
- Enhanced loader to support PVH/HVM boot to allow OSV run on QEMU with
--kernel
option - Added support of QEMU 4.x
- Enhanced HPET driver to support 32-bit main counter
Filesystem improvements
- VFS
- Hardened implementation of
open()/sys_open()/task_conv()
to handle null path - Enhanced
__fxstata
to handleAT_SYMLINK_
- Hardened implementation of
- RAMFS
- Greatly improved speed of write/append operations
- Fixed bugs
- Delay freeing data until i-node closed
- Keep i-node number the same
Tools
- Added script
manifest_from_host.sh
to allow building images from artifacts on Linux host “as-is” without need to compile - Added script
build-capstan-mpm-packages
to create capstan MPM packages - Added Ubuntu- and Fedora-based Docker files to help create build and test environment
- Enhanced
test.py
to allow executing unit tests on Firecracker
Bugs and other enhancements
- Fixed
sem_trywait()
that for example allows Java 12 run properly on OSv - Improved memory utilization by using memory below the kernel
- Introduced new command line suffix
!
allowing to force termination of lingering threads - Revamped building of the
cli
andhttpserver
apps to use OpenSSL 1.1 and Lua 5.3 and minimize compilation - Tweaked OSv code to support compilation by GCC 9
Improved Documentation
- Refreshed main README
- OSv-apps
- Scripts
Apps
- Added number of
*-from-host
apps that demonstrate building images out of binaries from Linux host:- Java
- Python
- Node
- Lua
- Ffmpeg
- Added demo app -
openjdk12-jre-from-docker
that creates an image out of a Docker image - Added demo app that demonstrates running GraalVM isolates
- Added an example of a basic mono app
- Improved support of Golang PIEs
Closed issues
- #1050 - Can't run anything with 1.01G of memory
- #1049 - tst_huge hangs with memory over 1GB.
- #1048 - VM with memory larger than 4GB doesn't boot
- #1043 - Map kernel higher in virtual memory
- #1039 - Handle new DT_RUNPATH in object::load_needed()
- #1035 - iperf3 fails with exception nested to deeply on ROFS/RamFS image
- #1034 - Build failures when build directory's pathname has a space
- #1031 - The graalvm-example fails with graalvm 1.0.0-rc13
- #1026 - golang-pie-httpserver crashes on control-C
- #1023 - Ignore missing symbols when loading objects with BIND_NOW in relocate_rela()
- #1022 - lua package requires openssl 1.0
- #1012 - Improve physical memory utilization by using memory below 2MB
- #884 - slow write/append to files on ramfs
- #689 - PIE applications using "optarg" do not work on newer gcc
- #561 - OSv failed to run a pthread application.
- #534 - imgedit.py can't always connect to qemu-nbd
- #305 - Fail to run iperf3 on osv
- #190 - Allow running a single unmodified regular (non-PIE) Linux executable
- #34 - Mono support
Commits by author
KANATSU Minoru (1):
Nadav Har'El (9):
- scripts/build: gracefully handle spaces in image= parameter
- build: don't fail build if pathname has space
- trace.py: fix failure on newest Python
- tracepoints: fix for compiling on gcc 9
- sched: fix gcc 9 warning
- libc: avoid weak_alias() warnings from gcc 9.
- acpi: ignore new gcc 9 warning
- imgedit.py: do not open a port to the entire world
- sched.hh: add missing include
Waldemar Kozaczuk (86):
- Added initial version of README under scripts directory
- Lowered default ZFS qcow2 image size from 10GB to to 256MB
- Add script to setup external bridge
- Refactor and enhance firecracker script
- Changed loader to print total boot time by default
- Enhanced setup.py to support Ubuntu 18.10 and 19.04
- Add GNU libc extension function error()
- Add GNU libc extension variables __progname and __progname_full
- Update nbd_client.py to support both old- and new-style handshake
- Simplify building images out of artifacts found on host filesystem
- Move getopt* files to libc folder and convert to C++
- Enhance getopt family of functions to work with PIEs
- Tweaked nbd_client.py to properly handle handshake and transport flags in new handshake protocol
- Tweak open() and sys_open() to return EFAULT error when pathname null
- elf: handle new DT_RUNPATH
- Enhanced __fxstata to handle AT_SYMLINK_
- vfs: Harden task_conv() to return EFAULT when cpath argument is null
- Added option suffix "!" to force termination of remaining application threads
- Move _post_main invocation to run_main
- Provide full implementation of epoll_pwait
- Start using memory below kernel
- Change vmlinux_entry64 to switch to protected mode and jump to start32
- Fixed indentation in xen.cc
- Move kernel to 0x40200000 address (1 GiB higher) in virtual memory
- Allow running non-PIE executables that do not collide with kernel
- Make RAMFS not to free file data when file is still opened
- [Fix slow write/append to files on ramfs](6a57...
Release 0.53.0 "Firebird"
This is the next release of OSv since the previous one 0.52.0 was crafted. Unlike previous one this release does deliver new exciting feature - it supports running OSv on new lightweight hypervisor firecracker which makes possible to boot OSv Read-Only FS image in as low as 5ms per bootchart. We hope next release will happen before end of second quarter of 2019.
Features Highlights
- Enhanced OSv to run on firecracker (for details please see here)
- OSv can boot as vmlinux (64-bit ELF - please see loader.elf attached)
- OSv does not require ACPI to run
- Added support of virtio mmio devices
- Added support of both legacy and modern virtio 1.0 PCI devices (for details please see here)
- Further reduced minimal memory to run OSv to 18MB (25% reduction)
- Fixed critical bug affecting apps doing heavy floating point computations like ffmpeg (see issues #1019, #1020, #1010, #1018, #536)
- Implemented some missing syscalls to better support Golang apps
- Enhanced Python 3 app to support including modules
- Upgraded tomcat app to version 9
- Added support of graalvm apps
Specifics
- Refactored virtio layer to support legacy and modern PCI and mmio devices
- Implemented modern virtio PCI device
- Enhanced OSv to boot without ACPI present
- Enhanced OSv to discover SMP information by reading MP table if ACPI is not present
- Made OSv bootable as a vmlinux 64-bit ELF
- Added boot option to disable PCI enumeration
- Added virtio mmio implementation
- Made httpserver-api configuration file configurable
- Enhanced ELF dynamic loader to support position dependent shared libraries (Graal VM)
- Deleted “assigned virtio driver"
- Made memory allocation more efficient
- Handles small memory allocations ( < 16 bytes) more space efficiently
- Implemented more space-efficient early memory allocation scheme (reduced memory utilization by 6MB - see #270)
Closed issues
- #1030 - Test failure with Fedora Java 8
- #1029 - Debug build fails because tracepoint sections are discarded
- #1028 - scripts/firecracker.py doesn't pass input to OSv
- #1020 - Maybe need to reset fpu status word on context switch
- #1019 - Maybe need to reset fpu state after saving it
- #1018 - OSv crashes sporadically with page fault when transcoding video with ffmpeg
- #1017 - upload_manifest.py opens a port to the world, and always the same port
- #1011 - Make allocations < 16 bytes more space efficient
- #1010 - Memory access fault when OSv pounded by periodic /os/threads REST call
- #1006 - Missing function fcntl64
- #1004 - Handle (either support correctly, or forbid) non-fPIC shared objects
- #956 - Missing readlinkat()
- #536 - Cassandra with CLI crash with cassandra stress
- #270 - Wasted memory in early malloc()
List of contributors alphabetically
- Felix Yan (@felixonmars) - 1 patch
- Nadav Har'El (@nyh) - 8 patches
- Przemek Pikuła (@pshem) - 4 patches
- Waldemar Kozaczuk (@wkozaczuk )- 45 patches
- Geraldo Netto (@geraldo-netto) - 6 patches
- Vinícius Fraga (@viniciusmsfra) - 1 patch
Acknowledgments
We want to thank all contributors to the project. But the special thanks go to:
- Nadav Har’El for contributing and reviewing many patches and providing guidance for many others
- Waldemar Kozaczuk for contributing most patches
Artifacts
This time we are only publishing kernel artifacts and capstan packages for Python 3 and REST API httpserver.
Release 0.52.0 "Sparrow"
This is the next release of OSv since the previous release 0.51.0 was crafted. Though this release does not deliver any dramatic features, it brings major improvements around kernel size and memory utilization and adds support of many new apps including Python 3. We hope new releases will happen every quarter and the next one should be expected around beginning of 2019.
Features Highlights
- Smaller kernel which makes OSv use less memory and boot faster
- reduces non-compressed kernel size from 9.2MB to 6.7MB (27% reduction) and compressed one from 6.2MB to 3.9MB (37% reduction)
- reduces boot time by ~ 20ms
- Reduced minimal memory to run OSv to 25MB
- Reduced memory utilization for ram images (especially large ones)
- Added support for Python 3 and Golang 1.11
- Added many new apps including ffmpeg, spring boot, ratpack and akka
Specifics
- Set non-isolated mode as a default one for Java images
- Removed obscure UTF8 normalization feature to save 130 KB in kernel size
- Started merging IPv6 code from Spirent
- Relaxed ELF symbol resolution failure when BIND_NOW which should make more apps supported out of the box on OSv
- Improved bootfs to remove unnecessary copy of data
- Revived multi boot mode to support eventually booting on Hyperkit and on QEMU with qboot
- Implemented almost-in-place kernel decompression to reduce minimal memory size that provides a foundation for even less memory usage changes in the future
- Disabled '—whole-archive' linking for libgcc.a to reduce kernel size by 2.5MB
Closed issues
List of contributors alphabetically
- Charles Myers (@cmyers-spirent) - 2 patches
- Geraldo Netto - 2 patches
- Nadav Har'El (@nyh) - 13 patches
- Timmons C. Player (@DerangedMonkeyNinja) - 1 patch
- Waldemar Kozaczuk (@wkozaczuk) - 23 patches
Acknowledgments
We want to thank all contributors to the project. But the special thanks go to:
- Nadav Har’El for contributing and reviewing many patches and providing guidance for many others
- Waldemar Kozaczuk for contributing most patches
- Timmons C. Player and Charles Myers for contributing patches providing initial IPV6 support
Artifacts
This time we are only publishing kernel and capstan packages for Python 3 and ffmpeg.
Release 0.51.0 "Phoenix"
This is the first release of OSv since late 2015 when the last release 0.24.0 was crafted. Even though the development has not been as vigorous as in previous years, new release 0.51.0 delivers many new exciting features as well as fixes of many outstanding defects. We hope new releases will happen more frequently in future.
Features Highlights
- New MikelAngelo capstan by XLAB Slovenia
- Enhanced to support packages which makes building OSv even easier than before
- See this crash course for more details
- New filesystems
- New languages/runtimes support
- Golang (for more details read here
- Node.JS 6.10.3, 8.11.2
- Python 2.7
- Free Pascal
- Rust
- New hypervisors support
- XEN support for aarch64 (ARM) by Sergiy Kibrik
- OSv can boot on HyperV
- Fixed critical bug related to VirtualBox - 13b8acb
- New applications support
- Nginx
- Lighttpd
- Improved Java support
- Simpler non-isolated run java mode - read more details here 785e57e and f0bb5c2
- Support for Java 8 compact profiles, Java 9 and 10 - more details here bee9421
- Modularized Java build (19bf18f)
- Added new Zulu JREs (look for openjdk[89]-zulu-* named apps under https://github.com/cloudius-systems/osv-apps)
- Added support of SYSCALL instruction needed by Golang and Free Pascal
- libvdso - fast syscall compatibility library
- Added number of SYSCALLs to support Golang
- Improved httpserver module
- Modularization by API
- Added HTML5 command line app
- Configurable to serve arbitrary static content
- Cloud init improvements
- ISO image support
- Supports mount points
- Many pthread improvements/bugs
- ELF namespaces support - e9758b9
- Support Open MPI apps (High Performance Computing)
- Support compilation using GCC 6, 7 and 8
- Improved signals support
- Added runscript support
- Improved DHCP
- Added many missing C-lib functions
- Support for Virtlet (https://github.com/mirantis/virtlet)
- Added new docker file to build OSv kernel and capstan packages
- Added new docker file to make it easy to run selected set of apps on OSv
- Overall committed 549 patches and closed 206 issues
Acknowledgments
We want to thank all contributors to the project. But the special thanks go to:
- Nadav Har’El for contributing and reviewing most patches and providing guidance for many others
- Gregor Berginc, Justin Cinkelj and Miha Pleško (@miha-plesko) from XLAB Slovenia for greatly enhancing capstan, enhancing cloud init module and contributing many other patches to make Node.JS, Python 2.7 and nginx work on OSv.
- Benoit Canet for implementing NFS and contributing many patches to support Golang on OSv
- Sergiy Kibrik for contributing patches to make OSv run on XEN with Arm architecture
- Dor Laor for words of encouragements without which this release may have not happenned
List of contributors alphabetically
- Quentin Barnes - 2 patches
- Gregor Berginc (@gberginc) - 2 patches
- Benoit Canet (@benoit-canet) - 47 patches
- Brandon Cox (@justnoise) - 1 patch
- Hawx Chen (@HawxChen) - 1 patch
- Justin Cinkelj (@justinc1) - 77 patches
- Glauber Costa (@glommer) - 1 patch
- Shiqing Fan - 1 patch
- Dongjiu Geng - 1 patch
- Rean Griffith - 3 patches
- Nadav Har'El (@nyh) - 272 patches
- Sergiy Kibrik (@sa-kib) - 32 patches
- Waldemar Kozaczuk(@wkozaczuk) - 57 patches
- Michael Meeuwisse (@Meeuwisse) - 3 patches
- Vilmos Nebehaj - 1 patch
- Geraldo Netto (@geraldo-netto) - 13 patches
- Rick Payne (@rickpayne) - 5 patches
- Timmons C. Player (@DerangedMonkeyNinja) - 8 patches
- Christian Schwarz (@problame) - 3 patches
- Vincent Schwarzer - 1 patch
- Joel Thompson (@joelthompson) - 2 patches
- Yuri Volchkov (@yvolchkov) - 10 patches
- Iori YONEJI - 1 patch
- Madhuri Yechuri (@myechuri) - 1 patch
- Wang Yu - 2 patches
- eyujugu - 1 patch
- Hidehito Yabuuchi - 1 patch
Artifacts
This is also first time we are publishing many binary artifacts along these release notes on GitHub to download from. These binaries match exact files used by new capstan to build OSv images and go into $HOME/.capstan directory. We hope these will make much easier for newcomers to OSv to try their apps. The published artifacts include:
- osv-loader.qemu - OSv kernel
- OSv modules
- osv.bootstrap.* - default bootstrap
- osv.cli.* - command line app
- osv.httpserver-api.* - REST API (backed)
- osv.httpserver-html5-cli.* - HTML5 command line app
- osv.httpserver-html5-gui.* - HTML5 monitoring GUI
- runtimes
- osv.run-java.* - provides 'java' executable functionality in OSv to bootstrap Java apps
- osv.run-go.* - tiny app to bootstrap Golang apps
- osv.openjdk10-java-base.* - Java 10 minimal JRE repackaged to run Java apps on OSv
- osv.node-js.* - Node 8.11.2 built as PIE shared library to run on OSv
- example apps
- iperf
- lighttpd
- memcached
- mysql
- netperf
- nginx
- redis
Going forward we will be publishing kernel and possibly modules binaries if they change.