Ghost 0.3.0 - first public demo!

This forums is for OS project announcements including project openings, new releases, update notices, test requests, and job openings (both paying and volunteer).
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Ghost 0.3.0 - first public demo!

Post by max »

Hello! :)

I'm happy to announce the first public demo release of Ghost, a micro-kernel based operating system for the Intel x86 developed from scratch. The kernel and user space are written mostly in C++. This sneak preview shows the boot process and the user interface I've been working on lately. It is mostly eye-candy and not very practical to use. Just felt like its finally time to make an announcement. Download it and play around! :)

The project still has a long way to go for a release 1.0, but I'm steadily working on it to improve it and add new features. The kernel itself is a pure micro-kernel, that means all system programs (like the VFS, elf spawners etc.), drivers and applications run completely in user space. The API documentation page contains an (currently incomplete) documentation of all the kernel functions that are accessible from user space.

Feel free to ask any questions! You can always read the newest news on the project website. :)

Heres a demonstration video: http://www.youtube.com/watch?v=oCPuMvgsBI0

Image


Information & download

You can find more information about Ghost on its project website:
http://www.ghostkernel.org/

Download the .iso in the downloads section:
http://www.ghostkernel.org/download

Run it in VirtualBox (enable the IO/APIC). The VESA driver in this demo is not very complete and only supports linear framebuffers, therefore it does not run in some VMs. VirtualBox, Bochs or QEMU work.


Features
(updated list can always be found on the website)

Heres a small list of the implemented features.

Kernel:
  • Micro kernel
  • Extensive userland API library
  • ELF binary spawning
  • Multiprocessor- & multitasking support
  • Forking with copy-on-write
  • Messaging
  • Shared memory
  • Named processes
  • IPC-Streams
  • COM port logging
  • V8086 monitor for BIOS calling
Userland:
  • Virtual filesystem
  • Window manager, GUI with homemade toolkit
  • Userspace library for simple file I/O, creating UIs etc.
  • PS/2 keyboard & mouse driver
  • VESA video driver
  • System binaries (process spawner etc.)
I'd love to hear your feedback! :)

Greets, Max
Last edited by max on Fri Nov 14, 2014 3:30 pm, edited 3 times in total.
User avatar
KemyLand
Member
Member
Posts: 213
Joined: Mon Jun 16, 2014 5:33 pm
Location: Costa Rica

Re: Ghost 0.3.0 - first public demo!

Post by KemyLand »

I'll run it and tell the results in a few minutes in an edit :wink:
Happy New Code!
Hello World in Brainfuck :D:

Code: Select all

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
[/size]
User avatar
KemyLand
Member
Member
Posts: 213
Joined: Mon Jun 16, 2014 5:33 pm
Location: Costa Rica

Re: Ghost 0.3.0 - first public demo!

Post by KemyLand »

Removed my "edit idea" 8)

I ran it on qemu-system-i386. As always, GRUB took about 5 seconds to load everything. The ISO is pretty heavy (why?). The kernel bootup is fine. Did you added some debug delays? The APIC driver is great, pretty Linuxy. I know the GUI is a work in progress, but it is really slow and buggy, at least with the mouse. I'm still curious, why the ISO is 37,2MB? I know GRUB(2?) takes about 5MB, but the remaining 32,2MB of *compiled* code?

Edit: Results that the kernel is just 360,2KB (remember it's a micro). Those extra bits came from the initrd... What do you have in there? :shock: BTW, what "loader" does?

Edit 2: It appears to be that "loader" is what GRUB really takes as kernel. The kernel and initrd are just Multiboot modules. "loader" then does its job, loading right?
Happy New Code!
Hello World in Brainfuck :D:

Code: Select all

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
[/size]
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by max »

Hey Kemyland!
KemyLand wrote:I ran it on qemu-system-i386. As always, GRUB took about 5 seconds to load everything. The ISO is pretty heavy (why?). The kernel bootup is fine. Did you added some debug delays? The APIC driver is great, pretty Linuxy. I know the GUI is a work in progress, but it is really buggy, at least with the mouse. I'm still curious, why the ISO is 37,2MB? I know GRUB(2?) takes about 5MB, but the remaining 32,2MB of *compiled* code?
Try it in VirtualBox. It works much better there and should barely lag. QEMUs video mode is for some reason much slower than VirtualBox when using the video mode I do.
KemyLand wrote:Edit: Results that the kernel is just 360,2KB (remember it's a micro). Those extra bits came from the initrd... What do you have in there? :shock: BTW, what "loader" does?
Well, there are about 6-7 MB's of font's, images, cursors and stuff. I could've excluded some. ;)
Also, the ramdisk contains all the programs that already run under the hood:
idle, initialization, ps2driver, spawner, portdistributor, vbedriver, vfs, windowmanager
each has a size of about 3 to 6 MB. They are all statically linked, and also they are C++, hence the size. :P
KemyLand wrote:Edit 2: It appears to be that "loader" is what GRUB really takes as kernel. The kernel and initrd are just Multiboot modules. "loader" then does its job, right?
Right, the kernel is loaded in two steps: GRUB loads the Ghost loader, which then sets up stuff like paging and loads the Ghost kernel binary (an elf binary) right into the higher memory and jumps to it.

Thanks for the feedback and trying it out! :)
User avatar
KemyLand
Member
Member
Posts: 213
Joined: Mon Jun 16, 2014 5:33 pm
Location: Costa Rica

Re: Ghost 0.3.0 - first public demo!

Post by KemyLand »

max wrote:Well, there are about 6-7 MB's of font's, images, cursors and stuff. I could've excluded some. ;)
Also, the ramdisk contains all the programs that already run under the hood:
idle, initialization, ps2driver, spawner, portdistributor, vbedriver, vfs, windowmanager
each has a size of about 3 to 6 MB. They are all statically linked, and also they are C++, hence the size. :P
That explains *a lot*. BTW, you said Ghost has dynamic linking powers. It would benefit someone more than me if you use it with your API :wink:

As an example see this:
I installed VirtualBox. All went flaulessly, until a sudden panic occurred. 64MB of RAM wasn't enough! I changed to 128MB... I/O ACPI not found, Ok, Enabled. Then all went even slower, except the GUI, which remained at the same speed. This is a problem microkernels have to deal with in their early days :roll:

All except those points is great. I'ld like to see it with dynamic link, so 20MB are stripped from the mix...
Happy New Code!
Hello World in Brainfuck :D:

Code: Select all

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
[/size]
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by max »

KemyLand wrote:That explains *a lot*. BTW, you said Ghost has dynamic linking powers. It would benefit someone more than me if you use it with your API :wink:
No, Ghost has no dynamic linking yet. Thats one of the short-term goals :)

Once it's there, it'll get quite a little smaller I guess :)
User avatar
KemyLand
Member
Member
Posts: 213
Joined: Mon Jun 16, 2014 5:33 pm
Location: Costa Rica

Re: Ghost 0.3.0 - first public demo!

Post by KemyLand »

max wrote:
KemyLand wrote:That explains *a lot*. BTW, you said Ghost has dynamic linking powers. It would benefit someone more than me if you use it with your API :wink:
No, Ghost has no dynamic linking yet. Thats one of the short-term goals :)

Once it's there, it'll get quite a little smaller I guess :)
Then provide the source code. Maybe someone of us can help :P . After all, it's *Hobbist* OSDeving. Just remember to apply the (L?)GPL (or your *free* license of choise) on every file before releasing :wink:
Happy New Code!
Hello World in Brainfuck :D:

Code: Select all

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
[/size]
User avatar
Muazzam
Member
Member
Posts: 543
Joined: Mon Jun 16, 2014 5:59 am
Location: Shahpur, Layyah, Pakistan

Re: Ghost 0.3.0 - first public demo!

Post by Muazzam »

Your website is not opening.
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by max »

KemyLand wrote:Then provide the source code. Maybe someone of us can help :P . After all, it's *Hobbist* OSDeving. Just remember to apply the (L?)GPL (or your *free* license of choise) on every file before releasing :wink:
I most probably will sooner or later. :)
muazzam wrote:Your website is not opening.
I'm very sorry, there seems to be a temporary problem with my root server provider -.-

EDIT: website is up again. ;)
Kevin
Member
Member
Posts: 1071
Joined: Sun Feb 01, 2009 6:11 am
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by Kevin »

Looks quite nice, but it does feel rather heavy indeed.

Any ideas where the long boot time comes from?

Up to ~70 MB of RAM, I get an early error "out of memory" message. Then up to ~91 MB, it just hangs in different places without an error message; you may want to improve the failure mode there. With 92 MB, the GUI starts, but the background of the area containing the checkbox with its label seems to have random data; this is probably a genuine bug. Starting from 94 MB, it hangs again, and from 104 on garbled background again...From 115 MB on it seems to work correctly, but you definitely have something to work on.

The GUI is more or less usable in qemu with KVM enabled, but it's still noticable that the mouse cursor doesn't move smoothly. I think you need to do something about this, you can't burn the whole CPU power for just bringing the GUI to the monitor.
Developer of tyndur - community OS of Lowlevel (German)
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by max »

Hey Kevin!
Thanks a lot for reviewing and testing! :)

The heavy memory usage is because I copy the entire ramdisk into kernel heap. Thats also whats making the boot slower. Worked out fine with a smaller ramdisk, but not with ~35MB's of programs anymore. :mrgreen: I definitely need to optimize that by just remapping it.
Therefore things add up during boot: 35MB taken by ramdisk, then 35MB for the copy, and then 35MB for all the binaries in their address spaces because no lazy loading.

Well, its my first try and I know that there are still a lot of things to optimize :)
no92
Member
Member
Posts: 307
Joined: Wed Oct 30, 2013 1:57 pm
Libera.chat IRC: no92
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by no92 »

Wait - you have the original ramdisk loaded in memory by Grub. Then you have the copy. In addition, you also have all the apps pre-loaded? That is indeed pretty unoptimized.

Why are you not loading the apps on request? Some sort of shell would be required, but should not be too much of a problem. Also, I could see someone putting a lot of useless apps in there, which would make the system basically useless (I suppose a "Out of memory"-message makes the system reboot).

Just sayin', your work is still great (looks like it may be the next toaruos!) :D
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by max »

no92 wrote:Wait - you have the original ramdisk loaded in memory by Grub. Then you have the copy. In addition, you also have all the apps pre-loaded? That is indeed pretty unoptimized.
Hehe, yes I did. I just in this moment fixed that, so that the ramdisk is loaded by GRUB and then only remapped.
no92 wrote:Why are you not loading the apps on request? Some sort of shell would be required, but should not be too much of a problem. Also, I could see someone putting a lot of useless apps in there, which would make the system basically useless (I suppose a "Out of memory"-message makes the system reboot).
What do you mean by on request? All the apps that are running are required to have a running system, and because all things, like spawner and vfs also run in userspace, its a little more ;) That means, I don't load anything thats not used.
no92 wrote:Just sayin', your work is still great (looks like it may be the next toaruos!) :D
Oh thank you a lot, comparison to klange's work is a big honor for me.

Thanks dude! :)
User avatar
darkinsanity
Member
Member
Posts: 45
Joined: Wed Sep 17, 2008 3:59 am
Location: Germany

Re: Ghost 0.3.0 - first public demo!

Post by darkinsanity »

I agree with what has been said already - the GUI looks nice, but is pretty slow. The system looks like it has a lot of potential, though. Also, please make it open-source soon - I'm very interested in taking a look at your APIC und VFS stuff.
Oh, and on more thing: Please consider using LZMA2 (.xz) to compress your ISO-image - it's far more efficient than zip. It's not a problem right now, since your image is comparably small, but when it gets bigger people with a slow internet connection (like me :cry: ) will thank you.
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Re: Ghost 0.3.0 - first public demo!

Post by max »

darkinsanity wrote:I agree with what has been said already - the GUI looks nice, but is pretty slow. The system looks like it has a lot of potential, though. Also, please make it open-source soon - I'm very interested in taking a look at your APIC und VFS stuff.
Oh, and on more thing: Please consider using LZMA2 (.xz) to compress your ISO-image - it's far more efficient than zip. It's not a problem right now, since your image is comparably small, but when it gets bigger people with a slow internet connection (like me :cry: ) will thank you.
Hey darkinsanity,
thank you for your feedback. It is - I'm working on the performance part.
I'm planning to make it open source. I just need some time to do it properly.
Oh okay, I will ;)
Greets, Max
Post Reply