% Encoding: UTF-8
@comment{x-kbibtex-encoding=utf-8}

% !TEX encoding = UTF-8 Unicode

@book{tanenbaum-moderne-betriebssysteme,
	address = {Hallbergmoos},
	author = {Tanenbaum, Andrew S.},
	edition = {4., aktualisierte Auflage},
	editor = {Bos, Herbert},
	isbn = {978-3-86894-270-5},
	publisher = {Pearson},
	series = {Always learning},
	size = {1285 Seiten : Illustrationen ; 24 cm x 17 cm},
	title = {Moderne Betriebssysteme},
	year = {2016}
}

@book{tanenbaum-the-minix-book,
	address = {Upper Saddle River, NJ},
	author = {Tanenbaum, Andrew S. and Woodhull, Albert S.},
	edition = {3. ed.},
	isbn = {978-0-13-142938-3; 0-13-142938-8; 0-13-142987-6},
	publisher = {Pearson Prentice-Hall},
	series = {The MINIX book},
	size = {XVII, 1054 S. : graph. Darst. ; 1 CD-ROM},
	title = {Operating systems : design and implementation},
	year = {2006}
}

@Book{tanenbaum-modern-operating-systems,
  title     = {Modern operating systems},
  publisher = {Prentice Hall},
  year      = {2015},
  author    = {Tanenbaum, Andrew S. and Bos, Herbert},
  address   = {Boston},
  edition   = {4. ed.},
  isbn      = {978-013-359-162-0; 978-1-2920-6142-9; 0-13-359162-X},
  keywords  = {Operating systems (Computers)},
  size      = {XXVI, 1101 S.},
}

@misc{linux-is-obsolete,
	author = {Tanenbaum, Andrew S. and Torvalds, Linus and others},
	month = jan,
	title = {LINUX is obsolete},
	url = {https://groups.google.com/d/topic/comp.os.minix/wlhw16QWltI/discussion},
	year = {1992}
}

@book{silberschatz2009operating,
	address = {Hoboken, NJ},
	author = {Silberschatz, Abraham},
	isbn = {978-0470233993},
	publisher = {J. Wiley \& Sons},
	title = {Operating system concepts},
	year = {2009}
}

@book{madieu2017linux,
	address = {Birmingham, UK},
	author = {Madieu, John},
	isbn = {978-1-78528-000-9},
	publisher = {Packt Publishing},
	title = {Linux deivce drivers development : develop customized drivers for embedded Linux},
	year = {2017}
}

@book{bharadwaj2017mastering,
	address = {Birmingham, UK},
	author = {Bharadwaj, Raghu},
	isbn = {978-1-78588-305-7},
	publisher = {Packt Publishing},
	title = {Mastering Linux Kernel development : a kernel developer's reference manual},
	year = {2017}
}

@book{achilles2006betriebssysteme,
	address = {Berlin},
	author = {Achilles, Albrecht},
	isbn = {978-3540238058},
	publisher = {Springer},
	title = {Betriebssysteme : eine kompakte Einführung mit Linux},
	year = {2006}
}

@book{glatz2015betriebssysteme,
	address = {Heidelberg},
	author = {Glatz, Eduard},
	isbn = {978-3864902222},
	publisher = {Dpunkt},
	title = {Betriebssysteme : Grundlagen, Konzepte, Systemprogrammierung},
	year = {2015}
}

@book{holt2014embedded,
	address = {London},
	author = {Holt, Alan},
	isbn = {978-1-4471-6602-3},
	publisher = {Springer},
	title = {Embedded operating systems : a practical approach},
	year = {2014}
}

@book{corbet2005linux,
	address = {Beijing Sebastopol, CA},
	author = {Corbet, Jonathan},
	isbn = {0-596-00590-3},
	publisher = {O'Reilly},
	title = {Linux device drivers},
	year = {2005}
}

@book{brause2017betriebssysteme,
	address = {Berlin},
	author = {Brause, Rüdiger},
	isbn = {978-3-662-54099-2},
	publisher = {Springer Vieweg},
	title = {Betriebssysteme : Grundlagen und Konzepte},
	year = {2017}
}

@book{wolf2009c,
	address = {Bonn},
	author = {Wolf, Jürgen},
	isbn = {978-3-8362-1411-7},
	publisher = {Galileo Press},
	title = {C von A bis Z : das umfassende Handbuch ; [inkl. CD-ROM mit Openbooks und Referenzkarte mit wichtigen Befehlen},
	year = {2009}
}

@misc{why-linux-monolith,
	author = {Gooch, Richard E.},
	month = oct,
	title = {Why is the Linux kernel monolithic? Why don't we rewrite it as a microkernel?},
	url = {http://vger.kernel.org/lkml/#s15-4},
	year = {2009}
}

@proceedings{lfd430,
	number = {v4.19},
	organization = {The Linux Foundation},
	publisher = {The Linux Foundation},
	title = {LFD430 Developing Linux Device Drivers},
	year = {2018}
}

@misc{microkernels,
	author = {Wu, Jason and Williams, Dan and Weatherspoon, Hakim},
	title = {Microkernels: Mach and L4},
	url = {https://www.cs.cornell.edu/courses/cs6410/2010fa/lectures/06-microkernels.pdf},
	year = {2010}
}

@article{rashidMach,
	author = {Rashid, Richard and Julin, Daniel and Orr, Douglas and Sanzi, Richard and Baron, Robert and Forin, Ro and Golub, David and Jones, Michael},
	month = {09},
	pages = {},
	title = {Mach: A System Software Kernel},
	year = {1992}
}

@inproceedings{Hrtig1997,
	author = {Härtig, Hermann and Hohmuth, Michael and Liedtke, Jochen and Schönberg, Sebastian},
	booktitle = {Proceedings of the sixteenth {ACM} symposium on Operating systems principles - {SOSP} {\textquotesingle}97},
	doi = {10.1145/268998.266660},
	publisher = {{ACM} Press},
	title = {The performance of $\upmu$-kernel-based systems},
	url = {https://doi.org/10.1145/268998.266660},
	year = {1997}
}

@book{DiamondTorvalds2002,
	added-at = {2009-08-29T18:11:31.000+0200},
	address = {München},
	author = {Diamond, David and Torvalds, Linus},
	isbn = {3-423-36299-5},
	publisher = {Deutscher Taschenbuch Verlag},
	timestamp = {2009-08-29T18:12:13.000+0200},
	title = {Linus Torvalds: Just For Fun. Wie ein Freak die Computerwelt revolutionierte. Die Biographie des Linux-Erfinders},
	year = 2002
}

@misc{programming-religion,
	author = {Gooch, Richard E. and others},
	month = oct,
	title = {Section 15 - Programming Religion},
	url = {http://vger.kernel.org/lkml/#s15},
	year = {2009}
}

@inproceedings{linux-clang,
	author = {Edge, Jake},
	month = sep,
	organization = {Linux Plumbers Conference},
	title = {Building the kernel with Clang},
	url = {https://lwn.net/Articles/734071/},
	year = {2017}
}

@proceedings{fosdem-linux-llvm,
	editor = {Desaulniers, Nick and others},
	month = feb,
	title = {Compiling the Linux kernel with LLVM tools},
	url = {https://fosdem.org/2019/schedule/event/llvm_kernel/},
	year = {2019}
}

@Misc{chat-zircon-arch,
  author       = {Geiselbrecht, Travis (travisg) and Anderson, Christopher (cja) and Brittain, Ben (bwb) and Marx, Anna-Lena (allegra3141)},
  title        = {IRC Chat Discussion About the Zircon Microkernel (Architecture, Design Goals, Language Support)},
  howpublished = {Freenode IRC},
  month        = feb,
  year         = {2019},
  comment      = {* liuyb2 has quit (Ping timeout: 255 seconds)
<allegra3141> is the zircon microkernel inspired or influenced by L4? 
<travisg> not particularly, no
<travisg> it's fairly different in design than L4
<travisg> abdulla: oooh, reading about the N2, it's pretty nice. Will definitely snag a few when they go up for order. https://www.hardkernel.com/blog-2/odroid-n2/
<travisg> if it's like the c2, you will absolutely want to buy a MMC flash module too. it's a massive speedup vs a SD card
<allegra3141> how did you deal with the cost of context switches? isn't it still an issue on modern cpus?
* dtb63 (~sopel@pool-173-59-235-228.bltmmd.fios.verizon.net) has joined
* dtb63 has quit (Ping timeout: 250 seconds)
<travisg> you make it as fast as possible
<travisg> it doesn't really change anything per se, except that it's additional overhead that a IPC based system has to deal with
<travisg> doubleplus so when you're doing KPTI and other meltdown/spectre stuff
<travisg> but fundamentally that's an overhead that you take, so you try to avoid having as many context switches as you can, and you make sure the ones you have are fast
<allegra3141> isnt the microkernel approach the opposite of avoiding context switches? (sorry for all that questions, its really interessting for me :) )
<DrNick> the microkernel approach is deciding that the cost is worth it
* pelco_ (5e3f1d1c@gateway/web/freenode/ip.94.63.29.28) has joined
<DrNick> the nice thing about microkernels is that if you design them right, once you've got everything fully debugged, you can transparently combine the HTTP server, the TCP/IP stack, and the NIC driver, the filesystem driver, and the disk driver together in the same process without recompiling any of the binaries
<travisg> yah basically what DrNick says
<travisg> we probably wont, since security is a major goal
<travisg> but you can
<travisg> it's very hard to make a microkernel based system perform as well as a monolithic system for traditional OSey things, but performance isn't always everything
* pelco_ has quit (Ping timeout: 256 seconds)
<travisg> and in many cases the things that matter aren't performance based
<travisg> ie, putting a ui up in front of someone, making sure it's smooth, etc. if you are careful you can make that not be dependent on low level system details
<travisg> the way i figure it is hardware as moved on a long way since the late 80s/early 90s when microkernels were all the rage
<travisg> there is cost to low level context switching and whatnot, but it's relatively speaking lower with modern hardware
<travisg> and SMP is ubiquitous now to help soak up some of the performance issues, if done correctly
* Stifler has quit (Ping timeout: 245 seconds)
<cja> microkernels mean my IOT crap fridge hopefully won't cause my IOT crap toaster to kernel panic
<travisg> yah, crappy iot devices scare the crap out of me
<travisg> i draw the line at having huge piles of random untested things sitting on wifi holding sockets out to the interwebs
<allegra3141> that's a really interessting answer. so you are fully aware of performance issues for all the benefits a microkernel approach comes with?
<travisg> of courwe
<travisg> it depends on what lens you look at these things with
<cja> You design things to avoid the syscall / context switch barrier to mitigate those concerns
<travisg> it's a tradeoff. you get modularity, security, safety and you lose some performance, potentially. but even then it's not so clear cut
<cja> vmos for instance handle a lot of heavy lifting for sharing data
<cja> and for some things we just avoid doing legacy access like ioports because those are slow, privileged, and need kernel side locking in some considerations
<travisg> it depends a lot on what the code is doing. if it's doing tons of file io, or lots of process creation/shutdown, then you wont perform as well as a monolithic posix system, because posix is extremely tuned for precisely that sort of workload
<travisg> but if the model is to have a lot of service processes, some of which are fairly long lived, then in that regard having a kernel that's more tuned for it makes sense. it's less of the process model is determined by the kernel, and more that the kernel is designed to implement the process model more directly
<travisg> it's all designed in concert
<allegra3141> makes absolutely sense to me. so security was an important design factor to you, right?
<allegra3141> and one more question: what were the reasons for c++ for the system and drivers? will you also add support for rust or other more modern languages?
<cja> We started this project in 2015 and rust was not mature enough when we did a language evaluation. Our use of C++ is largely centered around RAII / smart pointers / static checks, and we do have folks working on making Rust drivers possible (we have one almost ready afaik)
<allegra3141> I'm curious, that sounds very interesstinf
* bwb_ is adding support for rust drivers right now
<allegra3141> did you think about even more languages yet?
<bwb_> we have an IDL that describes the contract between in-process drivers, so no, but it shouldn't be an insane amount of work
<cja> No one is talking about haskell drivers but that doesn't mean someone can't invest the time to accomplish it
<bwb_> sometimes I joke about adding wasm or zig driver support
<cja> s/insane/tremendous/
<bwb_> ^ that
<bwb_> D support could be pretty cool
<bwb_> or even swift
<bwb_> (subsets of it)
<bwb_> what about a forth driver :D
<bwb_> or chicken-scheme. I've joked about that too
<allegra3141> I just have to laugh a bit. sounds like you are having fun
<bwb_> yeah, I'm having a blast working on this
<allegra3141> @bwb_ I'm curious on the result :)
<cja> The result is him not finishing banjo proxying for me
<cja> !
<bwb_> heyyyy. I'm reviewing some fidl/banjo CLs right now
<bwb_> also, when did I join the DDK team?!
<bwb_> and we need to think a lot about how proxying will work still.
<cja> We already had proxying, then banjo became a thing
<cja> So I guess I'll just to it by hand again?
<bwb_> s/had proxying/had bespoke proxying/
<bwb_> uh, the right answer is to ignore it until it gets autogenerated for you :)
* navidr (uid112413@gateway/web/irccloud.com/x-gaabwomzzxmgrutl) has joined
<bwb_> travisg / cja
<cja> what who why what
<bwb_> I have a crazy design question for y'all
<bwb_> about rust drivers
<cja> I can't ignore it
<cja> proxying is 100% the basis of my entire driver topology, lol
<bwb_> so, if I had you annotate your rust driver with a #![fuchsia_ddk::driver] annotation
<bwb_> that did a little bit of magic for you, would you find that "bad"?
<bwb_> No overhead at runtime, promise
<bwb_> it just makes sure certain pointers are setup properly in a safe manner
<bwb_> and de-dups a bit of boiler plate
<bwb_> (the stuff in the device_ops table)
<cja> I would immediately wonder how undebuggable it would be because rust macros are a labyrinth of horror when they go wrong
<bwb_> hmmm
<cja> decorators aren't a bad idea, but they're very opaque
<bwb_> yeah, that's my concern
<bwb_> and I know the normal driver author wants to know what's going on
<bwb_> suraj thought my proc_macro idea was an abomination, so I have two nays},
  editor       = {others},
}

@misc{zircon-vs-lk,
	author = {McGrath, Roland and Pizano, Carlos and Mitchener, Bruce},
	editor = {others},
	month = oct,
	title = {Zircon and LK},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/zx_and_lk.md},
	year = {2018}
}

@misc{lk-intro,
	author = {Swetland, Brian and Geiselbrecht, Travis and Bury, Alexandre and Mahate, Shakeel and others},
	editor = {others},
	month = oct,
	title = {Introduction},
	url = {https://github.com/littlekernel/lk/wiki/Introduction},
	year = {2017}
}

@misc{zircon-libc-posix,
	author = {Kralevich, Nick and McGrath, Roland and Kulakowski, George and others},
	editor = {others},
	month = mar,
	title = {Fuchsia's libc},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/libc.md},
	year = {2018}
}

@misc{zircon-intro,
	author = {Swetland, Brian and McGrath, Roland and Pizano, Carlos and Klein, Sean and others},
	editor = {others},
	month = oct,
	title = {Zircon},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/README.md},
	year = {2018}
}

@article{decade-linux-syscalls,
	author = {Bagherzadeh, Mojtaba and Kahani and Bezemer, Cor-Paul and Hassan, Ahmed E. and Dingel, Juergen and {R Cordy}, James},
	doi = {10.1007/s10664-017-9551-z},
	journal = {Empirical Software Engineering},
	month = {10},
	pages = {},
	title = {Analyzing a Decade of Linux System Calls},
	year = {2017}
}

@misc{zircon-handle,
	author = {Swetland, Brian and Kulakowski, George and Pizano, Carlos and Anderson, Christopher and others},
	month = jan,
	title = {Zircon Handles},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/handles.md},
	year = {2018}
}

@misc{zircon-concepts,
	author = {McGrath, Roland and Kulakowski, George and Swetland, Brian and others},
	month = dec,
	title = {Zircon Kernel Concepts},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/concepts.md},
	year = {2018}
}

@article{vdso-linuxjournal,
	author = {Davis, Matt},
	journal = {Linux Journal},
	month = feb,
	title = {Creating a vDSO: the Colonel's Other Chicken},
	url = {https://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken},
	year = {2012}
}

@misc{zircon-vdso,
	author = {McGrath, Roland and Kulakowski, George and Kelly, Garret},
	month = aug,
	title = {Zircon vDSO},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/vdso.md},
	year = {2018}
}

@book{mandl2014Grundkurs,
	author = {Mandl, Peter},
	isbn = {9783658062170},
	publisher = {Springer Vieweg},
	title = {Grundkurs Betriebssysteme: Architekturen, Betriebsmittelverwaltung, Synchronisation, Prozesskommunikation, Virtualisierung (German Edition)},
	year = {2014}
}

@misc{zircon-process,
	author = {Pizano, Carlos and Eisenberger, Todd and Kulakowski, George and McGrath, Roland},
	month = dec,
	title = {Process},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/process.md},
	year = {2017}
}

@misc{zircon-job,
	author = {Pizano, Carlos and Grahm, Scott and Kulakowski, George},
	month = nov,
	title = {Job},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/job.md},
	year = {2018}
}

@misc{zircon-thread,
	author = {Pizano, Carlos and Eisenberger, Todd and Grahm, Scott and Kulakowski, George},
	month = nov,
	title = {Thread},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/thread.md},
	year = {2018}
}

@misc{zircon-task,
	author = {Grahm, Scott and Kulakowski, George},
	month = nov,
	title = {Task},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/task.md},
	year = {2018}
}

@misc{zircon-objects,
	author = {Kulakowski, George and Voydano, Mike and Eisenberger, Todd and McGrath, Roland},
	month = feb,
	title = {Zircon Kernel objects},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects.md},
	year = {2018}
}

@misc{zircon-vmar,
	author = {Eisenberger, Todd and McGrath, Roland and Kulakowski, George and Mitchener, Bruce},
	month = oct,
	title = {Virtual Memory Address Region},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/vm_address_region.md},
	year = {2018}
}

@misc{linux-locking,
	author = {Russell, Rusty},
	title = {Unreliable Guide To Locking},
	url = {https://kernel.readthedocs.io/en/sphinx-samples/kernel-locking.html},
	year = {2016}
}

@misc{zircon-channel,
	author = {Pizano, Carlos and Swetland, Brian and Barth, Adam and McGrath, Roland and Kulakowski, George},
	month = dec,
	title = {Channel},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/channel.md},
	year = {2018}
}

@misc{zircon-socket,
	author = {Robinson, James and Swetland, Brian and McGrath, Roland and Kulakowski, George and Barth, Adam},
	month = nov,
	title = {Socket},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/socket.md},
	year = {2018}
}

@misc{zircon-fifo,
	author = {Kulakowski, George},
	month = apr,
	title = {FIFO},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/fifo.md},
	year = {2017}
}

@misc{zircon-event,
	author = {Eisenberger, Todd and McGrath, Roland and Kulakowski, George},
	month = sep,
	title = {Event},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/event.md},
	year = {2017}
}

@misc{zircon-eventpair,
	author = {McGrath, Roland and Kulakowski, George},
	month = sep,
	title = {Event Pair},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/eventpair.md},
	year = {2017}
}

@misc{zircon-futex,
	author = {McGrath, Roland and Eisenberger, Todd and Kulakowski, George and Pizano, Carlos},
	month = dec,
	title = {Futex},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/futex.md},
	year = {2018}
}

@misc{zircon-signals,
	author = {Swetland, Brian and McGrath, Roland and Kulakowski, George},
	month = feb,
	title = {Zircon Signals},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/signals.md},
	year = {2018}
}

@misc{zircon-vmo,
	author = {Anderson, Christopher and Eisenberger, Todd and Geiselbrecht, Travis and McGrath, Roland and Kulakowski, George and Mitchener, Bruce},
	month = oct,
	title = {Virtual Memory Object},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/vm_object.md},
	year = {2018}
}

@misc{zircon-scheduling,
	author = {Coyne, Ed and Mitchener, Bruce},
	month = dec,
	title = {Zircon Scheduling},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/kernel_scheduling.md},
	year = {2018}
}

@misc{zircon-bti,
	author = {Eisenberger, Todd},
	month = apr,
	timestamp = {2019-04-17},
	title = {Bus Transaction Initiator},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/objects/bus_transaction_initiator.md},
	year = {2018}
}

@misc{zircon-irc-io,
	author = {Marx, Travis Geiselbrecht Anna-Lena},
	month = apr,
	title = {IRC Chat Discussion About I/O in Zircon},
	year = {2019}
}

@book{quade2016Linux,
	address = {Heidelberg},
	author = {Quade, Jürgen and Kunst, Eva-Katharina},
	edition = {4., aktualisierte und erw. Auflage.},
	isbn = {9783864902888; 3864902886},
	publisher = {dpunkt-Verl.},
	title = {Linux-Treiber entwickeln : eine systematische Einführung in die Gerätetreiber- und Kernelprogrammierung - jetzt auch für Raspberry Pi},
	year = {2016}
}

@misc{zircon-devicemodel,
	author = {Forrest, Brian Swetland George Kulakowski Bailey},
	month = aug,
	title = {Zircon Device Model},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/ddk/device-model.md},
	year = {2018}
}

@misc{zircon-ddk-gettingstarted,
	author = {Mitchener, Bruce},
	month = oct,
	title = {Getting Started},
	url = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/ddk/getting_started.md},
	year = {2018}
}

@misc{linux-llvm,
	author = {Desaulniers, Nick and Hackmann, Greg and Hines, Stephen},
	month = oct,
	title = {Compiling Android userspace and Linux Kernel with LLVM},
	url = {https://llvm.org/devmtg/2017-10/slides/Hines-CompilingAndroidKeynote.pdf},
	year = {2017}
}

@Misc{zircon-platformbus,
  author = {Mike Voydanoff Christopher Tam Bruce Mitchener},
  title  = {Zircon's Platform Bus},
  month  = oct,
  year   = {2018},
  url    = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/ddk/platform-bus.md},
}

@Misc{zircon-simpledrv,
  author = {Rob Krten},
  title  = {Simple Drivers},
  month  = dec,
  year   = {2018},
  url    = {https://github.com/Allegra42/zircon/blob/i2c-grove-lcd/docs/ddk/simple.md},
}

@Comment{jabref-meta: databaseType:bibtex;}
