(Going to be) A microkernel that implements a WebAssembly "usermode" that runs in Ring 0.

Overview

Read this (from the creator of Nebulet)

Hi everyone,

It's been a while since I've looked at this repository.

Nebulet is not in active development, and hasn't been for a bit more than a year. There are a few reasons for this, but the main one is that I felt it had fulfilled its purpose: to demonstrate that microkernels that run managed code in kernel-mode are viable (before spectre/meltdown ruined things), at least to some extent. (Additionally, it helped me get internships, jobs, etc)

As it stands right now, I don't have the time or the motivation to work on Nebulet. My interests have moved on to other things, primarily the space industry (please message me [email in profile] if anyone who reads this works in the space industry, looking for internships/co-ops).

If someone would like to take on the Nebulet banner and continue to work on it, I'd be happy to pass it on. Otherwise, it'll probably sit here for the foreseeable future and will likely be archived at some point.

- Lachlan Sneff

Nebulet

Join the chat at https://gitter.im/nebulet/nebulet Build Status

What is Nebulet?

Nebulet is a Google Summer of Code project started during the summer of 2018. More details about Nebulet and GSoC are here.

Under the hood, Nebulet is a microkernel that executes WebAssembly modules in ring 0 and a single address space to increase performance. This allows for low context-switch overhead, syscalls just being function calls, and exotic optimizations that simply would not be possible on conventional operating systems. The WebAssembly is verified, and due to a trick used to optimize out bounds-checking, unable to even represent the act of writing or reading outside its assigned linear memory.

The Cranelift compiler is used to compile WebAssembly to native machine code. Once compiled, there are no complex interactions between the application and the runtime (unlike jit compilers, like v8) to reduce surface area for vulnerabilities.

Right now, Nebulet isn't ready to do anything yet, but it'll get there.

Building & Running

MacOS requires you to first cross compile binutils and to add the newly compiled ld-bfd to your path.

# checkout code and associated submodules
$> git clone https://github.com/nebulet/nebulet.git
$> cd nebulet/ && rustup override set nightly

# install tools
# make sure that `python` is accessible.
$> rustup component add rust-src
$> rustup target add wasm32-unknown-unknown
$> cargo install cargo-xbuild
$> cargo install --git https://github.com/nebulet/bootimage --branch packaging

# build userspace
$> cargo userspace

# compile the kernel
$> bootimage build --release

# compile and run the kernel in qemu
$> bootimage run --release -- -serial stdio
Comments
  • make nebulet an exokernel

    make nebulet an exokernel

    one thing I'm thinking is wouldn't it be a better idea to make an exokernel and have the wasm VM be a library os kinda like ExOS https://github.com/gwoplock/ExOS/issues

    opened by unmellow 12
  • Error building on macOS 10.13.4

    Error building on macOS 10.13.4

    macOS       10.13.4
    bootimage   0.3.0
    rust-lldb   lldb-900.0.57 Swift-4.0
    rustup      1.11.0 (e751ff9f8 2018-02-13)
    rustc       1.28.0-nightly (524ad9b9e 2018-05-29)
    
    f0f0f0:nebulet/ (master) $ bootimage build                                                                                                                                                                                                                                                                                                                                   [16:43:59]
    Building kernel
       Compiling core v0.0.0 (file:///Users/f0f0f0/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/src/rust/src/libcore)
        Finished release [optimized] target(s) in 29.85s
       Compiling compiler_builtins v0.1.0 (file:///Users/f0f0f0/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/src/rust/src/libcompiler_builtins)
        Finished release [optimized] target(s) in 1.60s
       Compiling alloc v0.0.0 (file:///var/folders/ny/y0ldh3v91ws80rjnj2vcvlwc0000gn/T/xargo.Jc4H5onMAVVZ)
        Finished release [optimized] target(s) in 3.05s
     Downloading rand_core v0.2.0
     Downloading raw-cpuid v3.1.0
     Downloading lazy_static v1.0.0
     Downloading hashmap_core v0.1.5
     Downloading spin v0.4.7
     Downloading os_bootinfo v0.2.0
     Downloading bit_field v0.9.0
     Downloading wasmparser v0.16.1
     Downloading x86_64 v0.2.0-alpha-019
     Downloading bitflags v1.0.1
     Downloading failure v0.1.1
     Downloading failure_derive v0.1.1
     Downloading quote v0.3.15
     Downloading synstructure v0.6.1
     Downloading quote v0.6.2
     Downloading syn v0.14.0
     Downloading proc-macro2 v0.4.3
     Downloading cc v1.0.14
     Downloading ux v0.1.0
     Downloading usize_conversions v0.2.0
       Compiling unicode-xid v0.0.4
       Compiling quote v0.3.15
       Compiling cc v1.0.14
       Compiling cretonne-codegen v0.8.0 (file:///Users/f0f0f0/Desktop/nebulet/cretonne/lib/codegen)
       Compiling unicode-xid v0.1.0
       Compiling cretonne-entity v0.8.0 (file:///Users/f0f0f0/Desktop/nebulet/cretonne/lib/entity)
       Compiling hashmap_core v0.1.5
       Compiling bitflags v1.0.1
       Compiling bitflags v0.7.0
       Compiling bit_field v0.9.0
       Compiling spin v0.4.7
       Compiling usize_conversions v0.2.0
       Compiling os_bootinfo v0.2.0
       Compiling ux v0.1.0
       Compiling rand_core v0.2.0
       Compiling synom v0.11.3
       Compiling nebulet_abi v0.1.0 (file:///Users/f0f0f0/Desktop/nebulet/nabi)
       Compiling proc-macro2 v0.4.3
       Compiling lazy_static v1.0.0
       Compiling wasmparser v0.16.1
       Compiling syn v0.11.11
       Compiling nil v0.1.0 (file:///Users/f0f0f0/Desktop/nebulet/lib/nil)
       Compiling raw-cpuid v3.1.0
       Compiling quote v0.6.2
       Compiling syn v0.14.0
       Compiling synstructure v0.6.1
       Compiling failure_derive v0.1.1
       Compiling failure v0.1.1
       Compiling x86_64 v0.2.0-alpha-019
       Compiling nebulet-derive v0.1.0 (file:///Users/f0f0f0/Desktop/nebulet/lib/nebulet-derive)
       Compiling cretonne-frontend v0.8.0 (file:///Users/f0f0f0/Desktop/nebulet/cretonne/lib/frontend)
       Compiling cretonne-native v0.8.0 (file:///Users/f0f0f0/Desktop/nebulet/cretonne/lib/native)
       Compiling cretonne-wasm v0.8.0 (file:///Users/f0f0f0/Desktop/nebulet/cretonne/lib/wasm)
       Compiling nebulet v0.1.0 (file:///Users/f0f0f0/Desktop/nebulet)
    error: linking with `lld` failed: exit code: 1
      |
      = note: "lld" "-flavor" "gnu" "-L" "/Users/f0f0f0/Desktop/nebulet/target/sysroot/lib/rustlib/x86_64-nebulet/lib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.10vxsr1s0btbpq7x.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.121way6815my2igp.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.12g6umllkgotll3a.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.153yty63tbhagxyu.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.158wz1xuz2s5vbhj.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.15domx3wazd28jhq.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.166udga5m9exbzl9.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.16i0u6jlhoj1fwbo.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.16u6js6g0l3k1ic6.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.18019miod40fok10.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.181cuta0v63atwcm.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1dqvxks6k2bzkxe.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1eoqieb29fre04rc.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1fxpeyale11q4zqk.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1i5e4omzc3vzt1vq.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1im38lueib99jsk0.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1jnlhyxj59jycbjv.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1lvyrrkmxj34z8lf.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1mhtxfurm7bfvaiq.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1mv7vb65oyg0ly12.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1mvmz58owquyropc.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1o1sh7k0fpdf7ic5.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1rg2fezz46s2u7v5.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1sq49gopnsnlxbnd.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1twu16w8872h6ynu.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1u8a7rc3nvq1fw7t.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1vknwfcvvkuauoic.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1w3ammq2ub8e8vho.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1xl7bcihfm2xjojj.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1y0f1d2ywo4h8fck.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1y16o1qfye96o7m0.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1y6rhjx87ccaoez5.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1yhkxpgbag7yc99g.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1yua5irwh2dbthvz.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1zeawhkbeobww1zn.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.1zwd8n7bcl3vhvvh.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.21arusd5ivvbqwxf.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.23tqyymcb18u96mb.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.24my024pa0o8ftgj.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2b02u508uzkqw52k.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2cjkqgs9bmk41sh9.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2ckmdtf1ekafwi2l.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2ckqsgnj068hrouq.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2dri7fjcjtvevlms.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2e57pjjy6slwtvcl.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2f80vr71gy60ou1c.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2hlmph9dt4308m9e.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2hoj15pf0m6nmtqg.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2jqywn86b2gsqohu.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2lyh15q6cjwzy18c.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2oxoroz75ea5i5j6.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2q5257pdh5222n7q.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2qjdlf3wzclk9mtk.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2ql88ds4ewhlxkci.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2r82puffnvvb8iic.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2sdcjwjjjmbvk53.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2syc2fwndl8qguo4.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2tgxoanktztadruv.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2u4fyuv7v9fdj7wj.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2xnvmuhjbhd7vxcm.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2zfyjnqllqhugyx0.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.2zz5l0bves6yadte.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3185vegbux9csdi5.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.31cspaezj4c3mplz.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.31v1m3tnn2bw55oo.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.340hcms0rqmw1pjh.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.34ulnixfsydgmmzp.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.35l6nak5d4orf0g6.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.35um8bgw2zto9e7r.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.381gxwau18ykhyfp.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.38ps4pa181wsnsy9.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.393wqfjf2s417ypm.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.39ohoqewd0orqd88.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3ayaeypdcro9d6yk.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3c5uevqzf3lrrcfy.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3douzeqvo0emriqb.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3e10jdqzq0u8y1jk.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3efm217pvnbgv3pa.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3gta6cp1hhtmjly7.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3hkuhgvvdf28ph6c.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3ik0x0hz6l66cx38.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3l4oj5jwq8el9dy8.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3ldk0i2zxftngav8.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3m5s6hvogqi05qt4.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3mro0grqml7sx4gg.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3n59r8dwh37c5r5s.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3nv0x9oaiu44fay5.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3oqznv5oym7l3m4e.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3qv46h01nd1ysqc6.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3rf6843a8x33yrpk.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3ulhplwn4br7ee34.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3upnvjl30cozukpz.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3urlgffs5ir77gy9.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.3wta9ctgdrpkmlpr.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.41z3ogmlk1j8c5so.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.436dotimmrgzkwfa.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.437q2ois6fu0jjbd.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.43v6g0y2xsxoggnt.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4558whd8snnm5ci1.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.45pc7c65foh9i35f.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.45rnfv5hnvlqvkod.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.45tr6gzo4pf6p27r.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.47irkjj3hrb7b0qf.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.48721dc4k5qxei0u.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.49a7n47po4ttqjl7.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.49lx1q7cxvpykyv0.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4bgnvma33e6crack.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4brwxiorhmgsb6oc.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4c6l6y7pk5mjtfga.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4cl8w99rl8gf49q5.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4cxyqmsl2ros1gyv.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4d3rq6o0x4a6ez9o.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4ehv7l3k9cyz2hit.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4ftbpri42cndpkx6.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4gaoie2tsyaq5j27.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4hqczukarqnsxim3.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4iuzcn4v7n6zrj4u.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4je34mlfievpyb8u.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4k1quckl10f9ir26.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4m5q2r00jqn5trbw.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4mntdqdcddcdj9ei.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4njvpzrazlkok9uf.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4pbypfl7ppj4sspf.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4ujkbmvk1azvmobe.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4um37v8ywjreyjj2.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4vxzyes09r1znfq9.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4xq48u46a1pwiqn7.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4yh8x2b62dcih00t.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4ypvbwho0bu5tnww.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.4z48g7rt4pu2zc91.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.50afhtnctzmbrhlt.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.50yvfm5lascvjb64.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.52tv6d9wb5ubr7n1.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.53csw2ktyl1nswlf.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.541a1uahmarck1wm.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.553c6w0lv08so7gm.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.55b09thekggwg5zp.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.564w86847etit7gc.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.56dly8q07ws8ucdq.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.57k06xfugllsc526.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.57skude8og5cpqjs.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.57tqkgm17tszxzvu.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.597o13fp8vq6m0rq.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.5adou0qr7tvip7aw.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.5cbeguylg7fto6d6.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.5chdyztotv2tnagk.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.5e5gsboepzmxdzda.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.5ecuwkx1xch5coyi.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.5ekol49tsc5zk4jg.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.5fmkn7i4vwwubr5v.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.78ct3x7m5sw4qkl.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.7sudkzalsfwk3ws.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.81jpvh8cn5k8ng8.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.8xzrsc1ux72v29j.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.96c6ncn0ir2gsr5.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.98g0d9x8aw3akpe.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.9e18u41ear60qks.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.9elsx31vb4it187.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.9fcb3syd3ne5k0n.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.9g0s3r8jk6cmuhz.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.a14wmt11uop3uci.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.c6lbtaiefvx3wya.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.cxgx6dqdh5t86u1.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.died1222q2hh16i.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.ixf7dfah5p9hqt7.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.k9f2pwh2vijau.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.mh4gosgd7xpz2yh.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.mz7vgmcf23rofcc.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.nrlnxdmuaptskr4.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.sageuyf9si8fc5r.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.t65055yq2tefdr9.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.vpbpnff9uk7ha66.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.y08g5q2x813c4wx.rcgu.o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.z9ox7biyn1otfln.rcgu.o" "-o" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/nebulet-5c5c308a1f3e7e8a.crate.allocator.rcgu.o" "--gc-sections" "-L" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps" "-L" "/Users/f0f0f0/Desktop/nebulet/target/debug/deps" "-L" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/build/raw-cpuid-32b5871866338c05/out" "-L" "/Users/f0f0f0/Desktop/nebulet/target/sysroot/lib/rustlib/x86_64-nebulet/lib" "-Bstatic" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libnil-3eee0fe5dd4dd566.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libcretonne_native-d549e1f7fab5805f.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libcretonne_wasm-e7fd3b913bf796fc.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libwasmparser-23c671211f40c1aa.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libcretonne_frontend-dd0b3ff5fb2ba5c3.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libcretonne_codegen-57aa69602566f803.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libcretonne_entity-6c941edd20184cac.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libfailure-18dbee4d1a63aa37.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/librand_core-2f0bdc38ed43762a.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libraw_cpuid-45253d2ea93daf24.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libbitflags-ea505995ea92c287.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libnabi-06b76e134183e9f0.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libhashmap_core-c69f7ad80e388998.rlib" "/Users/f0f0f0/Desktop/nebulet/target/sysroot/lib/rustlib/x86_64-nebulet/lib/liballoc-ee70aa1374762a63.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libx86_64-99ba9820018c44f0.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libux-b25495022457605f.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libusize_conversions-54913cdf673e4652.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libbit_field-1e50a935acb4e05e.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libos_bootinfo-f6052ebfb299c425.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libbitflags-3c6394c163bfa0dd.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/liblazy_static-3c0d26421f77781d.rlib" "/Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libspin-36ef44ffb7562b82.rlib" "/Users/f0f0f0/Desktop/nebulet/target/sysroot/lib/rustlib/x86_64-nebulet/lib/libcore-1c1d3b647b1ab47d.rlib" "/Users/f0f0f0/Desktop/nebulet/target/sysroot/lib/rustlib/x86_64-nebulet/lib/libcompiler_builtins-a95e93ac085f0aa4.rlib" "-Bdynamic"
      = note: lld: error: undefined symbol: c_cpuid
              >>> referenced by lib.rs:81 (/Users/f0f0f0/.cargo/registry/src/github.com-1ecc6299db9ec823/raw-cpuid-3.1.0/src/lib.rs:81)
              >>>               raw_cpuid-45253d2ea93daf24.raw_cpuid0.rcgu.o:(raw_cpuid::cpuid1::h6a842ea45791481c) in archive /Users/f0f0f0/Desktop/nebulet/target/x86_64-nebulet/debug/deps/libraw_cpuid-45253d2ea93daf24.rlib
    
    
    error: aborting due to previous error
    
    error: Could not compile `nebulet`.
    
    To learn more, run the command again with --verbose.
    
    opened by jowy 9
  • Implement a Preemptive Scheduler

    Implement a Preemptive Scheduler

    The building blocks are there.

    What needs to be done

    • [x] Implement a Thread type.

    • [x] Decide whether to go for Thread IDs or not.

    • [x] Get thread context switching working.

    enhancement 
    opened by lachlansneff 9
  • Create rust userspace, and print abi

    Create rust userspace, and print abi

    This basically does what it says in the title.

    The first commit just creates a print abi function. The only reason it isn't in a seperate pull request is the only way it ever gets tested is the second commit, and the second commit uses it. The only notable thing is it adds the ability to use functions with a return type of () in the abi.

    The second commit:

    • Modifies nebulet so that in the absence of a proper entry point, it will try and run a function called main.
    • Creates a new userspace crate, that includes both a library for interfacing with nebulets abi (incomplete, but easy to extend) and a "hello world" program that prints hello world.
    • Creates a build script that automatically builds the userspace crate, with appropriate cargo flags.
    opened by gmorenz 7
  • IPC Design

    IPC Design

    Here's the initial design for IPC (Inter-Procedural Communication):

    IPC will exist in two separate stages:

    1. Single-Copy
      • Copies data from one module to another.
      • This can be implemented immediately following the creation of a process model.
    2. Zero-Copy
      • Moves data between modules without copying data.
      • This allows for the highest-possible throughput.
      • Can only be implemented after WebAssembly has access to a garbage collector or reference-types.

    Once zero-copy ipc becomes possible to implement, single-copy ipc will be removed from nebulet unless there is a good reason to keep it.

    Comments and discussion are welcome!

    design 
    opened by lachlansneff 6
  • Expand Tools

    Expand Tools

    The cargo boot command is rather minimal and requires editing the source code to change between debug and release mode.

    • [ ] Add the ability to supply build type.

    • [ ] Select whether to wait for gdb to connect by a process argument.

    enhancement help wanted good first issue 
    opened by lachlansneff 6
  • Creating disk image failure

    Creating disk image failure

    os x 10.11.6
    rustc 1.28.0-nightly (990d8aa74 2018-05-25)
    cargo 1.28.0-nightly (f352115d5 2018-05-15)
    

    getting tripped up at the last step ... so close :)

    93501@mbp15 ~/localdev/source-code/forks/nebulet (master) $ bootimage run
    Building kernel
        Finished dev [unoptimized + debuginfo] target(s) in 0.06s
        Updating registry `https://github.com/rust-lang/crates.io-index`
    Creating disk image at bootimage.bin
    Error: Io(Os { code: 2, kind: NotFound, message: "No such file or directory" })
    93501@mbp15 ~/localdev/source-code/forks/nebulet (master) $ ll
    total 45376
    -rw-r--r--   1 93501  staff   419B May 31 00:36 x86_64-nebulet.json
    <snip>
    drwxr-xr-x  28 93501  staff   952B May 31 00:37 cretonne/
    drwxr-xr-x   6 93501  staff   204B May 31 00:40 target/
    -rw-r--r--   1 93501  staff    22M May 31 00:42 bootimage.bin
    
    opened by boneyard93501 4
  • Add a random function to the ABI

    Add a random function to the ABI

    (I'm trying to figure out a good first issue to expand the ABIs)

    Entropy is a complicated issue for operating systems, but there's the simpler approach of exposing something based on the rdrand instructions.

    opened by g2p 4
  • Why not part of the linux kernel? Just out of interest

    Why not part of the linux kernel? Just out of interest

    Would it be possible to implement a ring-0 wasm VM as a linux kernel module? I can see this being easier to integrate with existing systems, and thus have faster uptake than a completely new kernel.

    opened by maxwell-clarke-intranel 3
  • Update .gitignore and remove Cargo.lock

    Update .gitignore and remove Cargo.lock

    The first new pattern of .gitignore matches Cargo.lock. Cargo.lock is a file used internally by Cargo. It's generated from Cargo.toml if it doesn't exist and is regenerated whenever necessary. It shouldn't be included in the repo.

    The second pattern matches all vim swap files. It's a conveniency for vim contributors. Makes it impossible to accidentally add and commit vim swap files. (I've done this one too many times.)

    Cargo.lock was also removed from the repo.

    opened by pi-pi3 3
  • have to be on nightly ?

    have to be on nightly ?

    I am playing around with compiling golang and trying to get it to run in Nebula. Its a fascinating project

    
    github.com/nebulet/nebulet && bootimage build
    Building kernel
    WARNING: the sysroot can't be built for the Stable channel. Switch to nightly.
    
    
    opened by ghost 2
  • Fix: set dependancy to git from relative path

    Fix: set dependancy to git from relative path

    What I did

    Setting relative path blocked cargo userspace in README.md with error No such file or directory (os error 2). It turns out that the driver's cargo is pointing path in relative way assuming libsip and nebulet repos are placed in home(~/) directory. Now that libsip is in git, I add pull request to uncomment the git comment.

    opened by hskang9 0
  • Start on updating to Rust Nightly 1.39

    Start on updating to Rust Nightly 1.39

    I have almost everything updated except for a few things.

    hashmap_core relies on some internal allocation error enums that were recently changed. I've got a patch here but it still needs testing and such.

    Other than that, I'm getting these odd errors:

    error: unrecognized platform-specific intrinsic function: `x86_rdrand32_step`
      --> src/arch/x64/devices/rand/rdrand.rs:21:5
       |
    21 |     fn x86_rdrand32_step() -> (u32, i32);
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    error: unrecognized platform-specific intrinsic function: `x86_rdrand64_step`
      --> src/arch/x64/devices/rand/rdrand.rs:22:5
       |
    22 |     fn x86_rdrand64_step() -> (u64, i32);
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    error: unrecognized platform-specific intrinsic function: `x86_rdseed32_step`
      --> src/arch/x64/devices/rand/rdseed.rs:21:5
       |
    21 |     fn x86_rdseed32_step() -> (u32, i32);
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    error: unrecognized platform-specific intrinsic function: `x86_rdseed64_step`
      --> src/arch/x64/devices/rand/rdseed.rs:22:5
       |
    22 |     fn x86_rdseed64_step() -> (u64, i32);
       |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    

    I'm not sure if this has to do with my system or not. I'm running Manjaro Linux. I think this has something to do with the rand_core version. I upgraded it to 4.0 but the latest version, 5.0, brings a lot of API changes.

    I'll try to work on this when I can!

    opened by phase 2
  • Some questions about nebulet

    Some questions about nebulet

    Is nebulet still in active development? I saw this tweet: https://twitter.com/willscott/status/1121607193873145856 so I assume it is/will be?

    Do you think nebulet can implement WASI?

    And how much memory overhead does nebulet produce? Could wasm eventually be run on very resource constrained devices? 100-500kb flash?

    opened by Frederik-Baetens 4
  • New Threading System

    New Threading System

    I'm at a hackathon right now so I'm planning on dedicating a lot of time to ripping out the old threading system.

    The aim is to make all processes single-threaded to reduce synchronization overhead. This should also make the interface between usercode and the kernel a lot faster and simpler.

    • [x] Remove multi-threading from processes.

    • [x] Remove dynamic dispatching from api objects.

    • [ ] Somehow check api object type before calling api.

    • [ ] Remove synchronization from wasm table accesses.

    opened by lachlansneff 0
  • Doubts about path that Nebulet is taking.

    Doubts about path that Nebulet is taking.

    I recently found this comment on hackernews about an envisioned platform that sounded suspiciously similar to nebulet, just having taken a different path early on.

    Here's the comment in full:

    I think, eventually, the whole stack will get rewritten from the ground up. Someone is going to come up with a minimal OS that can be run on virtual machines that implements LLVM in a provably correct way, the OS hooks will get reimplemented as libraries for all the languages, and over a few years or so the entire cloud infrastructure will simply switch over.

    I think we're already half the way there, Amazon Linux is how widely deployed already? The surface area between application logic and OS code is shrinking by the year, once serverless goes mainstream then even application code will start to get rare, pushed to only those specific projects that require human interaction. Everything else is 'mere' computation, something that can be specified purely algorithmically and executed by anything.

    The OS will only be relevant in the context of personal computing, the human interface to the machine kingdom which shed those trappings decades ago.

    20-30 years down the road I see a translation layer unifying all three major, now solely personal, operating systems, and a fundamental, free software core being driven out, eventually supplanting proprietary development. Apple will do its best to retain tight coupling between their hardware and software, but they'll slowly fade just like Microsoft did as programming itself is revealed to consist of two main activities, intricate UX and comparatively dumb data plumbing, with a small priesthood of hardware driver maintainers / database developers for those who still want to do 'real' programming.

    Everybody will be able to code at some level and it'll be amazing.

    - vinceguidry


    It's food for thought. Should nebulet have taken a different path earlier on? Really, the essential concept here is architecture-independent processing of data. It doesn't matter if nebulet is a microkernel or what it's running on or what the drivers are written in.

    It just need to be a platform that you can drop code on that will receive data, process it, and send it back out.

    design 
    opened by lachlansneff 3
  • Proposal for threading and syscall interface redesign

    Proposal for threading and syscall interface redesign

    Asynchronous code seems to be all the rage these days. I figured out a way of implementing coroutines in Nebulet that appear to be normal threads to the user, but are, in fact, lightweight coroutines. This would allow the syscall interface to be completely asynchronous, but actually appear to be blocking. This would simplify writing applications for Nebulet and improve performance.

    This would involve removing preemption for threads and each process would only run on a single core at a time (essentially making processes the defacto unit of true concurrency), eliding the need for expensive synchronization.

    Gist

    • No preemption at the thread level. A process only executes on one cpu at a time.
    • Create threads normally, but thread switching code is injected at specific points, like external function calls and in some loops.
    • To run on multiple cpus, create multiple processes.
    • To the user, threads appear to be fully-preemptive, but under the hood, they are coroutines.
    • Can mark spots as thread switch locations and mark functions where no thread switches should be generated.

    Advantages

    • May result in better overall performance.
    • No locks or atomics are necessary for tables or thread queues.
    • The syscall interface can appear to be blocking, but actually be asynchronous.
    • No language support required for coroutines.

    Disadvantages

    • May constrict some usages.

    Design Challenges

    • Requires some way of generating and saving new wasm stacks.
    • Requires a complete rewrite of the threading support in Nebulet.

    Thoughts?

    enhancement help wanted design 
    opened by lachlansneff 2
Owner
Nebulet
Nebulet
suidsnoop is a tool based on eBPF LSM programs that logs whenever a suid binary is executed and implements custom allow/deny lists.

suidsnoop Log suid binaries and enforce per-uid suid policy. suidsnoop is a tool for logging whenever a suid binary is executed on your system and opt

William Findlay 11 Dec 22, 2022
Open Source Rust kernel; Runs WASM and WASI as lightweight containers.

?? etheryal Kernel etheryal kernel is an Open Source capability-based Kernel written in the Rust programming language. The kernel allows implementing

null 32 Dec 4, 2022
Distrod is a meta-distro for WSL 2 which runs Systemd as init process. You can run Ubuntu, Arch, and et.c with systemd in a minute. Distrod also has built-in auto-start feature on Windows startup and port forwarding abiltiy.

Distrod - WSL2 Distros with Systemd! Distrod is a systemd-based meta-distro for WSL2 that allows you to install Ubuntu, Arch Linux, Gentoo and many ot

Takaya Saeki 1.6k Jan 9, 2023
Tool for debugging WebAssembly (like gdb).

wasmgdb gdb for WebAssembly Install cargo install wasmgdb Usage Use wasm-edit to transform your module and, once WebAssembly traps, collect the WebAs

Sven Sauleau 12 Dec 15, 2022
An ownership model that is used to replace the Ring in Linux.

std-ownership An ownership model that is used to replace the Ring in Linux. It's 10x faster than Ring in Syscall. Overview The ownership system allows

Rhodes 4 Feb 13, 2023
An open-source reimplementation of the Horizon microkernel used in the Nintendo Switch.

Saturnus An open-source reimplementation of the modern RTOS microkernel "HorizonKernel" that is used in the Nintendo Switch. About The original Horizo

Valentin B. 41 Sep 5, 2022
A lightweight microkernel/IPC based operating system built with Rust which is not a clone of any existing operating system

Noble Operating System Noble is a lightweight microkernel and IPC based operating system built with Rust which is not a clone of any existing operatin

Revolution Xenon 3 Jan 10, 2022
Practice repo for learning Rust. Currently going through "Rust for JavaScript Developers" course.

rust-practice ?? Practice repo for learning Rust. Directories /rust-for-js-dev Files directed towards "Rust for JavaScript Developers" course. Thank y

Sammy Samkough 0 Dec 25, 2021
Giddy up! Things are going to be wild.

Jocky - For controlling your horses Current Idea The idea is essentially to have a custom directory that writes immutable segments, this means only 2

Harrison Burt 3 Jan 7, 2023
A comprehensive and FREE Online Rust hacking tutorial utilizing the x64, ARM64 and ARM32 architectures going step-by-step into the world of reverse engineering Rust from scratch.

FREE Reverse Engineering Self-Study Course HERE Hacking Rust A comprehensive and FREE Online Rust hacking tutorial utilizing the x64, ARM64 and ARM32

Kevin Thomas 98 Jun 21, 2023
WebAssembly on Rust is a bright future in making application runs at the Edge or on the Serverless technologies.

WebAssembly Tour WebAssembly on Rust is a bright future in making application runs at the Edge or on the Serverless technologies. We spend a lot of ti

Thang Chung 129 Dec 28, 2022
A Rust ESP stack trace decoder that can also runs in your browser thanks to WebAssembly

ESP Stack Trace Decoder A Rust ESP stack trace decoder that can also runs in your browser thanks to WebAssembly. It is composed of a ⌨️ Rust library,

Maxime BORGES 20 Oct 5, 2022
An asynchronous runtime compatible with WebAssembly and non-WebAssembly targets.

Promise x Tokio = Prokio An asynchronous runtime compatible with WebAssembly and non-WebAssembly targets. Rationale When designing components and libr

Yew Stack 29 Feb 6, 2023
Implements the free and open audio codec Opus in Rust.

opus-native Overview Implements the free and open audio codec Opus in Rust. Status This crate is under heavy development. Most functionality is not wo

Nils Hasenbanck 9 Nov 28, 2022
This crate implements fast route planning algorithms in Rust.

This crate implements fast route planning algorithms in Rust. Algorithms Currently implemented: Contraction Hierarchies: The implementat

Payas Rajan 4 Aug 15, 2021
This contract implements simple vote for the best coffe in indonesia using near protocol.

vote-coffe-near Description This contract implements simple vote for the best coffe in indonesia using near protocol. Contract in contract/src/lib.rs

RickhySis25 1 Nov 15, 2021
suidsnoop is a tool based on eBPF LSM programs that logs whenever a suid binary is executed and implements custom allow/deny lists.

suidsnoop Log suid binaries and enforce per-uid suid policy. suidsnoop is a tool for logging whenever a suid binary is executed on your system and opt

William Findlay 11 Dec 22, 2022
simple-eq is a crate that implements a simple audio equalizer in Rust.

simple-eq A Simple Audio Equalizer simple-eq is a crate that implements a simple audio equalizer in Rust. It supports a maximum of 32 filter bands. Us

Mike Hilgendorf 11 Sep 17, 2022
This crate implements an array_chunks method for iterators

This crate implements an array_chunks method for iterators. It behaves like [slice::array_chunks] but works with any [Iterator] type. Several nightly

kangalioo 1 Jan 24, 2022
Library that implements different versions of PPMD algorithm (compress and decompress)

ppmd-rs Library that implements different versions of PPMD algorithm (compress and decompress) Dependencies Rust 1.58 or newer Cargo How to build Clon

Alexander Zaitsev 3 Jun 20, 2022