Releases: includeos/IncludeOS
v0.15.0 Cunning Conan
Added
- Conan build system
- Major refactoring of how IncludeOS is built
- Multiple ARCH is managed by Conan profiles and dependencies
- 3rd party dependencies are now built and managed in Jenkins. All recipes can be found here
- Updated to libcxx, libcxxabi 7.0.1
- Updated to GSL 2.0.0
- Stable and latest binary packages can be found in bintray
- A repo to install Conan configs for IncludeOS: conan_config
- Improvements to Jenkins integration, automatic uploads of latest/stable packages on master-merge/tags
- Experimental IPv6 (WIP) including SLAAC
- IPv6/IPv4 dual stack integration
- TCP/UDP client / server
- Autoconfiguration with SLAAC
- Configuration with config.json - see #2114
- HAL (work in progress)
- The OS is now backed by a common Machine structure that makes it easier to create new ports
- A custom C++ allocator is available very early allowing the use of STL before libc is ready
Changed
- Updates to workflow. All documented in the README
- No more need for
INCLUDEOS_PREFIX
in env variables - Removed ARCH as part of the path to libraries/drivers/plugins/etc
- Drivers and Plugins can be created outside includeos
- No more need for
- Moved IncludeOS repository from
hioa-cs
toincludeos
organization - Major breaking changes in the OS API, in particular the OS class is removed, replaced with a smaller os namespace. Much of the code moved to new
kernel::
namespace. - Relocated plugins/libraries/scripts:
Removed / archived
- Cleanup of unused/outdated scripts
install.sh
is gone as it does no longer work with the Conan workflow
- mender client is archived
v0.14.1 RNG / stack protector fixes
Fixes a security issue where the stack protector is not properly initialized. Stack protector is now initialized using a proper rng at boot time and this patch improves how our rng is seeded, now requiring rdrand
or rdseed
instructions as entropy sources to be present at boot by default, unless this requirement is explicitly disabled.
Huge thanks to Spencer Michaels and Jeff Dileo of NCC Group who first reported this issue and to Jeff who helped us come up with this patch set.
v0.14.0
We’ve experienced issues with running out of memory due to lack of a way to limit speed/memory consumption in TCP. This happened when using our load balancer on links with different speed. This release mainly consists of fixes to this issue (and other issues found along the way).
What’s new:
- Our own implementation of
std::memory_resource
to be used with the C++17 concept polymorphic_allocatorPmr_pool
andPmr_resource
keep track and limits the amount of bytes an allocator can allocate.- The implementation is very flexible and let us improve and make a more sophisticated memory solution down the road
- Changed our byte vector used around the OS (mainly TCP) to use polmorphic_allocator
using buffer = std::pmr::vector<uint8_t>
- Each TCP stack now have its own assigned memory pool (
Pmr_pool
), and each TCP connection now gets assigned its own resource (Pmr_resource
)- Assigning memory to a TCP stack is done with
set_total_bufsize(const size_t size)
(default is set to 64MB)
- Assigning memory to a TCP stack is done with
- TCP connection no longer reports a static receive window, but instead a dynamic one based on how much memory used up in its resource
- This helps throttling the connection when buffers aren’t released quickly enough, and avoids buffering more than the memory limit
- Added new
on_data()
callback to TCP connection with support functionsread_next()
andnext_size()
- Triggered every time new data is ready to be read (use
read_next()
on connection to retrieve) - Solves the issue of buffering having to be implemented on top - this is now done in the connection
- Use either on_read or on_data depending on use case - as today, on_read has priority over on_data
- The same functions are now also exposed in the
net::Stream
interface
- Triggered every time new data is ready to be read (use
- New TLS stream implementation and stream buffer class
- Now utilizes the
on_data()
callback instead of on_read - Manages congestion and memory allocations for encryption better
- Now utilizes the
- Various fixes and improvements in TCP
- MicroLB hardening, improvements and fixes
v0.13.0 Lucky Luke
Major features:
- Replaced newlib libc with musl libc - which includes POSIX
- Added a linux syscall layer to be compatible with musl
- TCP SACK option support (receiver side)
Read more about our Linux compatibility here.
Minor features:
- Stateful TCP conntrack module
- New memory allocator as backend for mmap
- VFS plugin and config support
- Now used to mount file descriptors for POSIX support - utilized by RNG and Syslog
- Timestamp plugin for stdout
- Statman and Bufferstore rewritten to use more modern C++
- Many features added to Linux platform (LTO, PGO, callstack generation etc.)
Compatibility:
- Boot and vmrunner now supports solo5
Experimental:
- New IPv6 implementation. Currently a work in progress
- Including TCP API support
- MLDv2 and NDP (not finished)
Fixes:
- Fixed a flag in vmxnet3 restricting it from receiving VLAN tagged frames
- DNS client hardening
Other:
- TCP buffer sizes is now set per stack (and not per connection)
- DHCP now continues “forever” (but with less frequency)
net::Socket
is now using union addressnet::Addr
which contains either a IPv4 or IPv6 address - many calls has now been replaced with net::Addr- Print last received packet on panic
- Updated NaCl version
- Timer type added, which makes it possible to have the service print a timestamp or information about memory, CPU and more at a set interval
- New implementation under the hood, where each NaCl type can register into the transpiler dynamically
- Updates to the Iface type which now incorporates the Vlan type (Vlan as its own type has been removed)
- Iface members added:
buffer_limit
andsend_queue_limit
- Updated solo5 version
v0.12.0-rc.2 + bundles
IncludeOS v0.12.0-rc.2 with new bundles
v0.11.0
Major features:
- LiveUpdate. Example, blog post on liveupdate
- Solo5 / ukvm support. Example, Solo5/uvkm blog post
- WebSockets Example
- Built-in auto configuration of services using config.json. Example
Multiarch / multiplatform:
- 64-bit support, now default. IncludeOS 64-bit blog post
- 32-bit chainloader for use with boot tool
- Reorganized for multiple platforms
Networking:
- Support TCP options/features; Timestamp & Window Scaling (RFC 7323) and Delayed ACK
- Path MTU Discovery, RFC 1191 (IPv4) and partly RFC 1981 (IPv6). Disabled by default until more thoroughly tested in the wild. See the unit test for example
- Kernel hooks for filter chains. Will enable upcoming firewall / NAT functionality.
- Support for Virtual IPs in Inet and TCP
- Support for partial IP/TCP checksumming
- DNS Client caching.
- Inet Domain Name support.
Utilities:
- Fixed size version of MemBitmap - allocates and owns storage.
- CMake now supports additional arguments (see #1404)
- CMake option for what CPU features to compile for.
- CRC64 and base64 implementations by @RicoAntonioFelix
- Script to easily run IncludeOS instances in VMware
Fixes:
- Time is now the same as the hosts time on all supported cloud vendors and hypervisors.
- Port_util now works correctly.
Extra special thanks to @RicoAntonioFelix for innumerable improvements, and to @dfct for help with TCP cleanup.
New dependency build
All dependencies should now be built without redzone
New dependency libs bundle
cxxabi is now being built out of the LLVM source tree, invalidating previous bundles. This IncludeOS dependency release adds a new dependency bundle, improved scripts for building the bundle and newlib updated to the latest version.
Update:
We've added another bundle which contains 64bit builds of all deps as well, for upcoming x86_64 support.
v0.10.0
Partial POSIX support
- Blocking sockets
- Syslog
- Tar/gzip
- Read only file support (read, open, stat, seek etc.)
Replaced old build system with CMake
Extra special thanks to @andreashappe for getting us started!
HTTP 1.1 support
- HTTP server functionality
- Simple, highly usable HTTP client
Monorepo
All IncludeOS subprojects moved into main IncludeOS repo, including:
- Mana Web Application Framework
- Acorn Web Appliance service
Other notable features
- VFS (Virtual file system)
- System RNG (Thanks, @randombit!)
- Boot with Grub (Thanks @sarum90!)
Utility classes
- CRC32 checksumming
- Fixed queue
- Path to regex
- URI support
- Syslogd with RFC5424 over UDP plugin
- TAR support, including gzip support with the help of uzlib.
Dependencies
- http-parser - Efficient http parsing
- rapidjson (optional)
- uzlib
- python-psutil
- python-jsonschema
Tools
- Diskbuilder: Easily create and link a memdisk with the content of a directory
- boot tool: Python program to easily boot IncludeOS services
v0.9.3
Distro support
- Support for Arch (@GuzTech)
- Support for Fedora (@andreashappe)
- Support for LinuxMint (@h4tr3d)
Examples
- 256-color mode VGA (@lefticus)
- Snake rewrite (@Voultapher)
Kernel
- Stack switching utility (context). Create and use custom area in memory as
stack for a provided delegate. - CPUID (@gurka). Includes KVM feature support
Misc
- Minor fixes and refactoring (@RicoAntonioFelix)
- Move ELF symbols (yet again) into its own section, but pre-pruned
- Further reductions in binary sizes
- Move stack to the old 640k conventional memory hole, reducing memory usage
- Updated logotype and READMEs
Heap debugging
- Validate new and frees
- Buffer overflow checks (@gurka)
- Verbose mode for tracking allocations
Utility
- Added Logger - ring buffer log utility
- Added Timer - makes it easier to start, stop and restart a task
Profiling
- Add mode toggle for stack sampler allowing Switch between caller mode
(show who calls function) and current mode (show current function).
Networking
- Packet now travels through the network stack as a unique_ptr instead of
shared_ptr (avoiding control block allocation) - Isolated network layering a bit by moving ethernet address to hw::MAC_addr
- TCP optimizations
- Fixed bug where read would result in double free
- No longer sets up default callbacks, saving allocations
- Minor reduction in size
Testing
- Improvements to test automation