Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
efadd62
net: Properly initialize and provide copy constructor for IPv4 and MA…
fwsGonzo May 9, 2019
3e86309
ip6: Fix some warnings and misalignment in ICMP6/MLD
fwsGonzo May 9, 2019
30b74bd
util: Fix warning in PMR allocator
fwsGonzo May 9, 2019
075f577
util: Use C++17 PMR when available, fixes GCC9 build
fwsGonzo May 9, 2019
997da44
threads: Add support for pthread_create/phtread_exit
fwsGonzo Apr 5, 2019
ba73c02
threads: Recursive threads by restoring TLS
fwsGonzo Apr 10, 2019
314ef2a
threads: Increase recursion depth in the test
fwsGonzo Apr 11, 2019
fbedca0
threads: Refactor and add basic yield()
fwsGonzo Jul 16, 2019
d7ec120
threads: Fully implemented yield and cleanup properly
fwsGonzo Jul 16, 2019
a7a7496
threads: Basic futex support which enables mutexes
fwsGonzo Jul 17, 2019
24c88cb
threads: gettid, settid_address, musl stubs, work on C++ threads support
fwsGonzo Jul 17, 2019
833ad0b
threads: Add support for some clone flags and C++ threads
fwsGonzo Jul 17, 2019
48f4005
threads: Add some aarch64 stubs
fwsGonzo Jul 18, 2019
886250e
cmake: Make for-production default OFF
fwsGonzo Jul 19, 2019
4216a21
cmake: Remove deprecated crtn/crti steps
fwsGonzo Jul 19, 2019
efa09ae
x86: Disable KVM clocks for now
fwsGonzo Jul 19, 2019
6e909bb
cmake: Add minimal build option, remove PRE_BSS in aarch64
fwsGonzo Jul 19, 2019
85425a1
threads: Add test for throwing in a thread
fwsGonzo Jul 19, 2019
87a5f03
x86: Remove some stray spaces
fwsGonzo Jul 19, 2019
36f375d
common: Print expects failure on newline
fwsGonzo Jul 20, 2019
4a1edae
x86: Keep .memdisk section when GC enabled
fwsGonzo Jul 20, 2019
b7ad380
liveupdate: Make storage area size customizable
fwsGonzo Jul 20, 2019
f7337e3
cmake: Add option to disable ELF symbols
fwsGonzo Jul 20, 2019
e0bfa3f
Update README with new demo size measurements
fwsGonzo Jul 20, 2019
edfc533
kernel: Fix multiboot end detection bug
fwsGonzo Jul 21, 2019
a3c403b
kernel: Remove some unused startup and panic code
fwsGonzo Jul 21, 2019
67d357c
kernel: Rename syscalls.cpp to panic.cpp
fwsGonzo Jul 21, 2019
cd78def
kernel: Add a way to disable extra symbol checks
fwsGonzo Jul 21, 2019
432ee24
liveupdate: Fix bug that underestimates ELF binary size
fwsGonzo Jul 21, 2019
3658486
Remove some unused files
fwsGonzo Jul 22, 2019
f403d20
Add licence removal script
fwsGonzo Jul 22, 2019
826686c
Remove header spam from all source files
fwsGonzo Jul 22, 2019
9285879
x86: Silence warnings and disable verbose multiboot
fwsGonzo Jul 22, 2019
7f6c6f0
liveupdate: Fix build issue when missing ARCH
fwsGonzo Jul 22, 2019
6dc5289
kernel: Improvements, fixes, utilize profiling solution
fwsGonzo Jul 22, 2019
f4a8367
x86: Run less rounds on RNG init
fwsGonzo Jul 22, 2019
b99da8e
cmake: Add option for enabling startup profiling
fwsGonzo Jul 22, 2019
ab1069b
x86: Make fast kernel start more reliable
fwsGonzo Jul 23, 2019
bffe869
Set theme jekyll-theme-cayman
fwsGonzo Jul 23, 2019
1a342bb
liveupdate: Refactor to solve performance issues, add profiling
fwsGonzo Jul 23, 2019
f9828ae
musl: Implement nanosleep
fwsGonzo Jul 24, 2019
f62de2c
Remove pages theme
fwsGonzo Jul 24, 2019
15bec8c
liveupdate: Checksum internal headers by default
fwsGonzo Jul 24, 2019
0f1019d
liveupdate: Add bounds-checking to storage area
fwsGonzo Jul 25, 2019
e8864a3
readme: Update info on hello world example
fwsGonzo Jul 28, 2019
9b00941
liveupdate: Store multiboot memory map across updates
fwsGonzo Aug 3, 2019
aac8a94
cmake: Disable system headers and fix liveupdate compiler arguments
fwsGonzo Aug 3, 2019
383f8e5
cmake: Fix building with GCC, linker: Remove .got and merge GCC excep…
fwsGonzo Aug 11, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,6 @@ CMakeFiles*
CMakeCache*
cmake_install.cmake

# Name of installation folder
IncludeOS_install

# Vim
*.swp

Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
project (includeos C CXX)

option(SMP "Compile with SMP (multiprocessing)" OFF)
option(PROFILE "Compile with startup profilers" OFF)

#Are we executing cmake from conan or locally
#if locally then pull the deps from conanfile.py
Expand Down
8 changes: 0 additions & 8 deletions NOTICE

This file was deleted.

9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
![IncludeOS Logo](./etc/logo.png)
================================================

**IncludeOS** is an includable, minimal [unikernel](https://en.wikipedia.org/wiki/Unikernel) operating system for C++ services running in the cloud and on real HW. Starting a program with `#include <os>` will literally include a tiny operating system into your service during link-time.
**IncludeOS** is a minimal [unikernel](https://en.wikipedia.org/wiki/Unikernel) operating system for C++ services running in the cloud and on real hardware. Starting a program with `#include <os>` will include a tiny operating system into your service during link-time.

IncludeOS is free software, with "no warranties or restrictions of any kind".

Expand All @@ -14,14 +14,13 @@ IncludeOS is free software, with "no warranties or restrictions of any kind".

## <a name="features"></a> Key features

* **Extreme memory footprint**: A minimal bootable 64-bit web server, including operating system components and anything needed from the C/C++ standard libraries is currently 2.5 MB.
* **Extreme memory footprint**: A tiny bootable C++17 hello world is currently 900 KB and needs only 5 MB RAM on x86_64.
* **KVM, VirtualBox and VMWare support** with full virtualization, using [x86 hardware virtualization](https://en.wikipedia.org/wiki/X86_virtualization), available on most modern x86 CPUs. IncludeOS will run on any x86 hardware platform, even on a physical x86 computer, given appropriate drivers. Officially, we develop for- and test on [Linux KVM](http://www.linux-kvm.org/page/Main_Page), and VMWare [ESXi](https://www.vmware.com/products/esxi-and-esx.html)/[Fusion](https://www.vmware.com/products/fusion.html) which means that you can run your IncludeOS service on Linux, Microsoft Windows and macOS, as well as on cloud providers such as [Google Compute Engine](http://www.includeos.org/blog/2017/includeos-on-google-compute-engine.html), [OpenStack](https://www.openstack.org/) and VMWare [vcloud](https://www.vmware.com/products/vcloud-suite.html).
* **Instant boot:** IncludeOS on Qemu/kvm boots in about 300ms but IBM Research has also integrated IncludeOS with [Solo5/uKVM](https://github.com/Solo5/solo5), providing boot times as low as 10 milliseconds.
* **Modern C++ support**
* Full C++11/14/17 language support with [clang](http://clang.llvm.org) 5 and later.
* Full C++11/14/17 language support with [clang](http://clang.llvm.org) 6 and later.
* Standard C++ library (STL) [libc++](http://libcxx.llvm.org) from [LLVM](http://llvm.org/).
* Exceptions and stack unwinding (currently using [libgcc](https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html)).
* *Note:* Certain language features, such as threads and filestreams are currently missing backend support but is beeing worked on.
* **Standard C library** using [musl libc](http://www.musl-libc.org/).
* **Virtio and vmxnet3 Network drivers** with DMA. [Virtio](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=virtio) provides a highly efficient and widely supported I/O virtualization. vmxnet3 is the VMWare equivalent.
* **A highly modular TCP/IP-stack**.
Expand Down Expand Up @@ -61,7 +60,7 @@ The following command will configure conan to use our build profiles and remote
$ conan config install https://github.com/includeos/conan_config.git
```

**Note:** If you prefer to set up conan manually the full configuration can be found in the [conan_config](https://github.com/includeos/conan_config.git) repository. You can browse our prebuilt conan packages in [bintray.com/includeos](https://bintray.com/includeos).
**Note:** If you prefer to set up conan manually the full configuration can be found in the [conan_config](https://github.com/includeos/conan_config.git) repository. You can browse our prebuilt conan packages in [bintray.com/includeos](https://bintray.com/includeos).



Expand Down
16 changes: 0 additions & 16 deletions api/arch.hpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2017 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef INCLUDEOS_ARCH_HEADER
Expand Down
16 changes: 0 additions & 16 deletions api/arch/aarch64.hpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2017 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef AARCH64_ARCH_HPP
#define AARCH64_ARCH_HPP
Expand Down
16 changes: 0 additions & 16 deletions api/arch/i686.hpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2017 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef i686_ARCH_HPP
#define i686_ARCH_HPP
Expand Down
16 changes: 0 additions & 16 deletions api/arch/x86/cpu.hpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,3 @@
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2015 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef X86_CPU_HPP
Expand Down
16 changes: 0 additions & 16 deletions api/arch/x86/gdt.hpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,3 @@
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2015 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef X86_GDT_HPP
Expand Down
19 changes: 0 additions & 19 deletions api/arch/x86/paging.hpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,4 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2017 IncludeOS AS, Oslo, Norway
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef X86_PAGING_HPP
#define X86_PAGING_HPP
Expand Down Expand Up @@ -823,18 +808,14 @@ class Page_table {
};


//
// Page table types for 4-level x86 paging
//
using Pml1 = Page_table<4_KiB, void, x86_64, Flags::all & ~(Flags::huge | Flags::pdir)>;
using Pml2 = Page_table<Pml1::range_size, Pml1>;
using Pml3 = Page_table<Pml2::range_size, Pml2>;
using Pml4 = Page_table<Pml3::range_size, Pml3, x86_64, Flags::all & ~Flags::huge>;


//
// Specializations for lowest level 4k page tables (e.g. leaf nodes)
//

template <>
inline bool Pml1::is_page_dir(uintptr_t) noexcept
Expand Down
16 changes: 0 additions & 16 deletions api/arch/x86/paging_utils.hpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2017 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef X86_PAGING_UTILS
#define X86_PAGING_UTILS
Expand Down
16 changes: 0 additions & 16 deletions api/arch/x86_64.hpp
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2017 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef X86_64_ARCH_HPP
#define X86_64_ARCH_HPP
Expand Down
18 changes: 1 addition & 17 deletions api/common
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*- C++ -*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2015 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef INCLUDEOS_COMMON_HEADER
Expand Down Expand Up @@ -62,7 +46,7 @@ inline void __expect_fail(const char *expr, const char *file, int line, const ch
#ifdef INCLUDEOS_SMP_ENABLE
SMP::global_lock();
#endif
fprintf(stderr, "%s:%i:%s %s \n",file, line, func, expr);
fprintf(stderr, "%s:%i:%s\n>>> %s\n",file, line, func, expr);
fflush(NULL);
#ifdef INCLUDEOS_SMP_ENABLE
SMP::global_unlock();
Expand Down
16 changes: 0 additions & 16 deletions api/debug
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2015 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef API_DEBUG_HEADER
Expand Down
14 changes: 0 additions & 14 deletions api/delegate
Original file line number Diff line number Diff line change
@@ -1,20 +1,6 @@
// -*-C++-*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2015 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef API_DELEGATE_HEADER
Expand Down
4 changes: 1 addition & 3 deletions api/detail/os.hpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@

#include <os.hpp>
#include <arch.hpp>
#include <hw/cpu.hpp>

Expand All @@ -9,5 +7,5 @@ inline uint64_t os::cycles_since_boot() noexcept
}
inline uint64_t os::nanos_since_boot() noexcept
{
return (cycles_since_boot() * 1e6) / os::cpu_freq().count();
return cycles_since_boot() / util::GHz(os::cpu_freq()).count();
}
16 changes: 0 additions & 16 deletions api/fiber
Original file line number Diff line number Diff line change
@@ -1,20 +1,4 @@
// -*- C++ -*-
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2017 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef __API_FIBER__
#define __API_FIBER__
Expand Down
16 changes: 0 additions & 16 deletions api/fs/common.hpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,3 @@
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2015 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef FS_COMMON_HPP
Expand Down
16 changes: 0 additions & 16 deletions api/fs/dirent.hpp
Original file line number Diff line number Diff line change
@@ -1,19 +1,3 @@
// This file is a part of the IncludeOS unikernel - www.includeos.org
//
// Copyright 2015-2016 Oslo and Akershus University College of Applied Sciences
// and Alfred Bratterud
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#pragma once
#ifndef FS_DIRENT_HPP
Expand Down
Loading