Online beginner's kernel programming course
From Crashcourse Wiki
[edit] The teaser
My name is Rob Day. Starting a couple weeks ago, I plan on teaching approximately 24 weeks worth of an online course on introductory Linux kernel programming for beginners. And it's going to cost $39 (CAD). For the entire course. If you want to know more, keep reading. And, yes, a detailed syllabus is coming in a few days, please be patient.
(NOTE: Currently, you can't leave comments on this wiki article to ask questions but, within a day, this post will be reproduced on the spectacularly redesigned http://crashcourse.ca site, where comments will be welcome.)
UPDATE, JUN 14: The first couple lessons are now available at no charge [here]. Enjoy.
[edit] $39!?!? What's the catch?
No catch at all -- here's my plan and my motivation. As many people in the Linux community know, I've dabbled in writing and delivering Linux-related courseware for quite some time, including writing introductory articles on how to get into kernel programming. I've finally decided to turn that into a course that people can take online, and that will also allow me to make some money from it that will, if this works out, let me perhaps write another online course. And another. And so on.
My proposed course format will be one new lesson posted approximately every week or so, for a total of, say, 24 lessons. I figure 24 lessons (or about six months) would be sufficient to lay the groundwork for someone who wants to get deeper into kernel programming. That amount of time would certainly not be enough to turn anyone into an accomplished device driver author, but it would be more than adequate to establish a solid foundation for further development.
So let's be clear -- if you're already a kernel programming expert, there's probably not much you'd learn here (although you might be surprised). But if you've always wanted to get started, this would be exactly the course for you.
One last point about the format -- these lessons would not be virtual training happening in real time, they would simply be posted every week or so and you could come by and work on them any time you wanted after each posting. So your schedule can be eminently flexible.
[edit] Why this particular delivery model?
When I first proposed this over-time delivery model in a couple forums looking for feedback, a number of people were adamant that this is not what would interest them, as they preferred a single course document, ready to go all at once that they could download in its completed entirety. That's not going to happen here, for a number of reasons.
First, it will take time to write all these lessons and I would prefer to get the course off the ground and running before I've even finished the final lessons. I already have enough content for the first 8-10 lessons so that, as those lessons are going up, I'm continuing to write the next ones.
Another reason for the over-time delivery model is that it gives students a chance to work on each lesson and use a comments section on each article to ask questions, or exchange ideas with other registered students. And based on that feedback, I can actually quickly make changes and improve the very next lesson. And as I said, this gives me a chance to start the course fairly soon while I'm still writing content.
Some people will like this delivery model. Some won't. I understand that, but this is how I've decided to do it. If you truly want to be able to do the course all at once, you can always wait until it's been delivered in its entirety, then register and have access to everything all at once. :-) But if you do it that way, you'll miss the fun of the interactive discussions.
P.S. Obviously, I wasn't clear on the over-time delivery aspect, but students do not need to register and keep up with every single lesson as it's being delivered. Rather, students are welcome to register at any time (even after the course is over), at which point they will have access to all of the lessons that had been posted at that point. In short, the course is entirely self-paced -- join when you want, and work on lessons when you have the time. No one is going to rush you.
[edit] How is this course different from everything else out there?
Simple -- it's an actual course. With lessons. That will require you to do things and test the results. I won't just be telling you how things work from a theoretical perspective, I will be requiring you to do programming as part of each lesson's exercises. And each lesson's work will lead neatly into the next lesson.
This will not be just theoretical knowledge, it will be practical development and testing. And I will be supplying solutions so that you don't get stuck in the middle of the course and give up out of frustration. But, again, given that registered students will have a comments forum, as long as other students are willing to chat, there will always be someone else to ask questions of.
You won't be in this alone.
[edit] How will you pay?
No need to worry about this just yet, but I suspect I'll set up a Paypal account where students pay, whereupon they'll get a username and password to get to the course lessons and which will, of course, be active for the duration of the lesson and sometime afterwards.
[edit] And how will you know whether it's worth it?
Ah, here's the burning question: How can you know that, even for the astonishingly low price of $39 (CAD), you'll be getting your money's worth? Simple -- I'm going to make the first four lessons publicly available so anyone can play along. After four lessons, I think you should have formed enough of an opinion to decide if you want to continue.
If you do, you pay the $39 and keep going. If you don't, you walk away having invested only time. I think that approach is eminently fair.
[edit] Aren't I worried about course piracy?
Of course, since there's absolutely nothing to stop a single person from registering for the course, getting access to the lessons, and passing on that content to 500 of his or her closest friends, none of whom end up paying for it. But there's a couple things that might discourage people from going that route.
First, would you seriously consider pirating a Linux kernel programming course that costs only $39? Really? That's just lame. :-)
Secondly, while anyone would be able to read the content, only registered students will have access to participate in the comments section, which I feel is a tangible benefit of registration.
And, finally, pirating the course wouldn't be in anyone's interests, including yours. My goal here (unsurprisingly) is to use my teaching and delivery skills to present a top-notch course, in return for which I make some money. If the course is pirated to the point where I get next to nothing back, I certainly won't go on to write further courses. If, however, this first course turns out to be financially viable, I'd certainly start work on the next course. And the one after that, and the one after that.
It's a simple trade-off, is it not? You can cheat me out of the registration fee on this initial course, at which point I'll most likely never write another one because it won't be worth it. It's entirely your decision. (Definitely some game theory issues there. :-)
[edit] So what do you do now?
For the moment, nothing, as I'm setting up the infrastructure. You can't leave any comments yet on this wiki page but in a day or two, I'll be moving this article to the imminently redesigned [Crash Course] site which will allow reader comments and you can give feedback to your heart's content.
In the meantime, feel free to drop me e-mail at rpjday@crashcourse.ca and, if you make a good point, I'll come back here and update this article to reflect and address any points I might have forgotten so keep checking back to see if I've added any new material.
And thanks for reading.
Robert P. J. Day
Waterloo, Ontario, CANADA
P.S. If you want to be kept up to date on new developments, best bet is to follow me on Twitter: http://twitter.com/rpjday.
[edit] ADDENDUM 0
Some folks have asked which distro and version the examples and exercises will be based on. While I like to think that the course would be distro-agnostic, I will pick a distro so that I can guarantee that all the labs will work for at least one environment, and that's going to be Ubuntu 10.04. No compelling reason. Just because.
[edit] ADDENDUM 1
Based on an e-mail I just received, yes, I should describe the prerequisites. I would expect students to understand Linux reasonably well at the userspace level, and have at least a little development experience in C (there is no need for C++ as the kernel contains none).
If you have no background whatsoever in C or no development experience at all, this course is probably not for you. Then again, you'll have the first four lessons to try at no charge so, at the end of that, you'll probably know whether you can handle the rest. Fair?
[edit] ADDENDUM 2
The question is: where's the syllabus and will there be kernel debugging? At some point, I'll be able to finalize a syllabus for this first course, you'll just have to be patient.
And as for kernel debugging, yes, there will be some basic kernel debugging in this first course but never forget that this is an introductory course. A colleague has already made the suggestion that there's more than enough material for an advanced course on kernel debugging alone, and I totally agree. So we're already talking about the next course. :-)
[edit] ADDENDUM 3
Certification? You want certification? That's going to be tough because certification without a formal and authorized testing process isn't worth much. For now, the best I'll be able to do is verify that someone registered for the course and I can arrange for something like a completion certificate. But beyond that, I'm not sure what else I can do. At least for now.
[edit] ADDENDUM 4: MORE COURSES
We're already talking more courses based on this delivery model: Advanced Kernel Debugging, Linux Security, Linux Performance Tuning, Virtualization and more. All (at least for now) delivered over time, and all incorporating full, hands-on labs and exercises. And all obscenely inexpensive.
This might be only the beginning.
[edit] ADDENDUM 5: WILL THE COURSE REQUIRE A BOOK?
OK, here's a controversial addition that just recently became an issue. There's a serious possibility that this course might require you to purchase (or borrow, or steal, or whatever) an actual book on Linux kernel programming, to be used for reference purposes.
I have a long history of writing courseware that was accompanied by some well-known reference book on the topic, for the sole purpose of not having to reproduce massive quantities of tables or lists or what have you. It was just simpler, for the courses I was delivering, to require that each student course kit come not just with my courseware manual, but with a reference book for just that purpose. Not an introductory book on the topic, a reference book. And that strategy worked out remarkably well.
For this particular course, I'm leaning towards telling students to get a copy of the upcoming book for which I'm the technical editor -- Robert Love's ["Linux Kernel Development," 3rd edition (LKD3)]. This would let me condense some lessons by simply writing things like, "For the full list of kernel synchronization primitives, see LKD3, p. XXX."
I would have no financial interest in the sale of that book, and students would be welcome to get it from anywhere they wish. Perhaps the only connection I would have is to make it one-click available to buy on my site and arrange a special price with the publisher, but I make no guarantees. I'm simply suggesting that adding a book to the student course kit would allow for a far more complete course experience, and you'd have an awesome book at the end of it.
Anyway, it's just a possibility but it's becoming more likely as time goes by.
ADDENDUM TO ADDENDUM: Yes, I'm going to require students to get a copy of LKD3. There is simply too much information in it that I would rather not have to reproduce, and it gives me the chance to give students the assignment of reading ahead for the next lesson.
Sure, you could always just borrow a copy from your cubemate but, seriously, how could you not want your own?

