Compare commits
28 Commits
Author | SHA1 | Date | |
---|---|---|---|
e296655010 | |||
|
2bdb8dae04 | ||
|
42d2c1383e | ||
|
07d1bc7f6f | ||
|
b79cd6b1d6 | ||
3f717e476e | |||
af324eefd4 | |||
cf99debcb4 | |||
35215486ec | |||
c471a67090 | |||
0ff3954be7 | |||
|
0327c24b11 | ||
|
b71c7ea715 | ||
|
a7fa953214 | ||
|
a578e85ba0 | ||
7e1e301005 | |||
d80d1dabcd | |||
|
93dae7a29d | ||
|
7560c06c0c | ||
4a72667a0f | |||
9fa56f89e9 | |||
|
4047de21ad | ||
|
b0ad3eba32 | ||
|
7f880a403a | ||
|
747e6b9825 | ||
acc6ba7601 | |||
|
a918d405bb | ||
|
c499ac6355 |
41
.drone.yml
Normal file
41
.drone.yml
Normal file
@ -0,0 +1,41 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
event:
|
||||
exclude:
|
||||
- cron
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: quackerd/fedora:latest
|
||||
commands:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake ../
|
||||
- make
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: docker-update
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- cron
|
||||
cron:
|
||||
- weekly
|
||||
|
||||
steps:
|
||||
- name: docker-update
|
||||
image: plugins/docker
|
||||
settings:
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
repo: quackerd/fedora
|
||||
tags: latest
|
3
Dockerfile
Normal file
3
Dockerfile
Normal file
@ -0,0 +1,3 @@
|
||||
FROM fedora:latest
|
||||
RUN dnf install -y cmake make clang nasm xorriso lld grub2-pc-modules grub2-tools-extra
|
||||
CMD ["/bin/sh"]
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 secXsQuared
|
||||
Copyright (c) 2020 quackerd
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
44
README.md
44
README.md
@ -1,45 +1,45 @@
|
||||
[![Build Status](https://ci.quacker.org/api/badges/d/bond/status.svg)](https://ci.quacker.org/d/bond)
|
||||
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
|
||||
# Building
|
||||
### Required packages
|
||||
For compiling kernel only (make compile):
|
||||
|
||||
nasm, clang, lld, llvm
|
||||
|
||||
To make bootable ISO (make all):
|
||||
|
||||
xorriso; grub-pc-bin for bios; grub-efi-amd64-bin, mtools for UEFI.
|
||||
Fedora: dnf install -y cmake make clang nasm xorriso lld grub2-pc-modules grub2-tools-extra
|
||||
|
||||
### Compiling
|
||||
Run "make all" or "make compile" in the root directory.
|
||||
mkdir build
|
||||
|
||||
This will generate secxkrnl.elf, secxkrnl.dmp, (and secxkrnl.iso) in "out" folder
|
||||
cd build
|
||||
|
||||
Run "make clean" to clean a build.
|
||||
cmake ../
|
||||
|
||||
make
|
||||
|
||||
# Running
|
||||
Load the iso with your favorite simulator or use "-kernel" option with QEMU.
|
||||
Load the iso with QEMU/your favorite simulator.
|
||||
|
||||
For UEFI simulation, use qemu_bios.bin in the root dir with QEMU.
|
||||
|
||||
# C++
|
||||
# C vs C++
|
||||
I would like my kernel code to be explicit so that I can reason about performance, memory allocation/deallocation. That mostly means when I look at a statement I know exactly what it does.
|
||||
The philosophy overlaps with Go's design quite a lot: https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html.
|
||||
|
||||
Using fully-featured C++ is overly complicated for kernels and I'm dubious of OOP in general. With "modern" C++ sometimes I find myself struggling more with the language itself than getting work done. Although the kernel is compiled with a C++ compiler, the base is very much C and we only add few nice things we can benefit from C++:
|
||||
Using fully-featured C++ is overly complicated for kernels and I'm dubious of OOP in general. Especially while enforcing "modern" C++, sometimes I find myself struggling more with the language itself than getting work done. **I have had lengthy thoughts myself regarding C++ but decided to drop it**. Here are some of the pros and cons I came up with.
|
||||
|
||||
## Stronger types
|
||||
## Good features
|
||||
|
||||
### Stronger types
|
||||
C++ is stronger typed than C. Simply compiling the kernel itself with a C++ compiler provides more type safety than C.
|
||||
|
||||
## C++ style casts (no dynamic_cast)
|
||||
### C++ style casts (no dynamic_cast)
|
||||
They are compile time casts so no runtime overhead. They provide a bit better type safety than C style casts. The only two casts we would need are probably const_cast and reinterpret_cast.
|
||||
|
||||
## template
|
||||
For type safety for data structures. Linux's list.h isn't type safe. FreeBSD's queue.h tries to mimic templates with macros, which is less elegant than just using template.
|
||||
### template
|
||||
For type safety for data structures. Linux's list.h isn't type safe. FreeBSD's queue.h tries to mimic templates with macros, which is less elegant than just using template. Update: this might not be true after trying to implement type safe in-place linked list in C++. I feel like template is just as inelegant for that.
|
||||
|
||||
## namespace
|
||||
### namespace
|
||||
Oh boy how I wish C standard would include namespace, if it weren't for backward compaibility and stable ABI.
|
||||
|
||||
## Banned features worth mentioning
|
||||
### Ownership management
|
||||
But rust did better?
|
||||
|
||||
## Banned features (tentative)
|
||||
This list explains SOME of the banned features that might seem useful.
|
||||
|
||||
### Class and ctors/dtors
|
||||
@ -63,4 +63,4 @@ Think about what "f();" could mean in C++ and the code executed by "a + b;". Nee
|
||||
I don't like mixing references with pointers. I don't find reference offering much more than raw pointers.
|
||||
|
||||
### RTTI and Exceptions
|
||||
Totally useless for kernels.
|
||||
Totally useless for bond.
|
Loading…
Reference in New Issue
Block a user