Resea Versions Save

A microkernel-based hackable operating system.

v0.9.0

3 years ago
  • Shared memory API (by @arpitvaghela)
  • Add virtio-gpu driver
  • Rust: Support alloc crate
  • Some bug fixes and trivial improvements

v0.8.0

3 years ago
  • x64: Hardware-assisted hypervisor support (like Linux KVM)
  • Add hypervisor implementation hv
  • Add (not cryptographic-secure) random number generator server (by @malbx)
  • x64: Support printing messages on the screen
  • vm: Support the physical memory map from GRUB
  • Fix a typo in docs (by @JeetKaria06)
  • Add link to IRC channel (by @milisarge)

How to try Linux on Resea

Requires Linux on an Intel CPU with nested vmx enabled.

$ qemu-system-x86_64 -m 512 -cpu IvyBridge -serial mon:stdio -enable-kvm -cpu host,vmx -kernel linux-on-resea.qemu.elf

v0.7.0

3 years ago
  • Add the datetime server with UNIX timestamp support (by @PrayagS)
  • Add the x64-based system's RTC device driver (by @PrayagS)
  • Mitigate malloc heap fragmentation (by @yashrajkakkad)
  • Add Intel HD Audio device driver
  • vm: Fix memory leaks
  • genidl: Support --lang html
  • raspi3: Initial (incomplete) support for multiprocessors
  • raspi3: Enable memory cache
  • benchmark: Some improvements for arm64

v0.6.0

3 years ago
  • Add unit testing framework (experimental).
  • Add the ATA (PIO mode) disk driver (servers/drivers/blk/ide).
  • fatfs: Support writing into a file.
  • tcpip: Implement the DNS client.
  • kernel: Isolate machine-specific code.
  • kernel/x64: Mitigate the CPU high usage caused by timer interrupts.
  • Reorganize and refactor IDL definitions.

How to Try

$ qemu-system-x86_64 -m 512 -cpu IvyBridge,rdtscp -smp 4 -serial mon:stdio \
    -netdev user,id=net1 -device virtio-net,netdev=net1,packed=on -cdrom build/resea.iso
...
shell> http-get http://httpbin.org/status/418
[virtio_net] received 64 bytes
[virtio_net] received 320 bytes
[virtio_net] received 64 bytes
[virtio_net] received 58 bytes
[tcpip] tcp: port=1000, seq=0000fa01, ack=00000001, len=0 [ SYN ACK ]
[virtio_net] received 54 bytes
[tcpip] tcp: port=1000, seq=0000fa02, ack=0000001d, len=0 [ ACK ]
[tcpip] tcp: received 0 bytes (seq=fa02)
[virtio_net] received 441 bytes
[virtio_net] received 54 bytes
[tcpip] tcp: port=1000, seq=0000fa02, ack=0000001d, len=387 [ ACK ]
[tcpip] tcp: received 387 bytes (seq=fa02)
[tcpip] tcp: port=1000, seq=0000fb85, ack=0000001d, len=0 [ FIN ACK ]
[tcpip] tcp: received 0 bytes (seq=fb85)
[shell] 
    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

v0.5.0

3 years ago
  • Support bare-metal Raspberry Pi 3B+. Resea now boots on a real Raspberry Pi!
  • Support Google Compute Engine: A HTTP server (servers/apps/webapi) on Resea works in the cloud!
  • Add the virtio-net device driver. It supports both modern and legacy devices.
  • tcpip: Support sending ICMP echo request.
  • tcpip: Fix some bugs in the DHCP client.
  • Some other bug fixes and improvements.
qemu-system-x86_64 -m 512 -cpu IvyBridge,rdtscp -smp 4 -serial mon:stdio \
    -netdev user,id=net1,hostfwd=tcp:127.0.0.1:1234-:80 \
    -device virtio-net,netdev=net1,packed=on \
    -cdrom build/resea.iso

v0.4.0

3 years ago
  • shell: Use the serial port driver in kernel for the shell access.
  • Support command-line arguments.
  • libs/resea: Add parsing library <resea/cmdline.h>.
  • tcpip: Implement TCP active open.
  • Add command-line utilities application named utils.
  • Remove display and ps2kbd device drivers.
  • kernel: Deny kernel memory access from the userspace by default.
  • kernel: Reorganize internal interfaces.
  • Introduce sparse, a static analyzer for C.

v0.3.0

3 years ago

In this and next release, I'm working on improving APIs and internal designs by introducing many breaking changes.

  • Reorganized system calls into: exec, ipc, listen, map, print, and kdebug.
  • Removed kernel heap for separation of mechanism and policy. Task data structures are now statically allocated in the kernel's .data section, and page table structures are now allocated from the userland (through kpage parameter in map system call).
  • Started implementing Rust support. Currently, there's only a "Hello World" sample app. I'll add Rust APIs once the C API gets stabilized (hopefully September).
  • shell: Add log command to print the kernel log.
  • Many bug fixes and other improvements.

How to Try

Download the attached iso file and run it on QEMU with the following options. This build runs a web server at localhost:1234.

qemu-system-x86_64 \
    -serial mon:stdio -cpu IvyBridge,rdtscp \
    -netdev user,id=net0,hostfwd=tcp:127.0.0.1:1234-:80 \
    -device e1000,netdev=net0,mac=52:54:00:12:34:56 \
    -cdrom resea.iso

v0.2.0

3 years ago
  • Add experimental support for micro:bit (ARMv6-M).
  • Add experimental support for Raspberry Pi 3 (AArch64 in ARMv8-A).
  • Add experimental (still in the early stage) Linux ABI emulation layer: run your Linux binary as it is on Resea!
  • A new build system.
  • Bunch of breaking changes, bug fixes, and improvements.

How to try

$ qemu-system-x86_64 -cdrom resea.iso -m 512 -cpu IvyBridge,rdtscp -serial mon:stdio -no-reboot -netdev user,id=net0,hostfwd=tcp:127.0.0.1:1234-:80 -device e1000,netdev=net0

v0.0.1

4 years ago

This is the first release including:

  • TCP/IP server
  • Web API server
  • FAT32 server
  • e1000 network device driver
  • IDE storage device driver
  • PS/2 keyboard device driver
  • Round-trip IPC benchmark program

Use QEMU to try it out (Web API server listens on http://localhost:1234):

$ qemu-system-x86_64 -cdrom resea.iso -m 512 -cpu IvyBridge,rdtscp -serial mon:stdio -no-reboot -netdev user,id=net0,hostfwd=tcp:127.0.0.1:1234-:80 -device e1000,netdev=net0