 Hi, this is exciting. It's nice to see the room so full of people. My name is Jeff Chowen. This is an introduction to operating systems. I'm super excited to be here today with you guys. This room's a good size for this class. Hopefully it'll be this full every day. Can people in the back hear me? Awesome, OK. So if you can't hear me later and my lips are moving, just shout, and I'll try to speak up a little bit. But I don't want to use a mic in this room. So today we're going to get started. I hope you guys will have a great semester. I love teaching this class. I love exposing people to this material. I think we have a fantastic semester ahead of you. Today is not particularly interesting. We're going to talk about boring stuff. We're going to talk about administrative trivia. We're going to talk about a general overview of the class and some course policies. The most important thing that we're going to do today, however, is introduce the staff. So that's coming right up. But before we get there, let me tell you a little bit about why I'm here. We'll find out while you guys are here in a minute. The reason I'm teaching this class is essentially because I took this class. So about, I don't know, I didn't count the years this year. I'm getting old enough where that's starting to get slightly depressing. So at some point in the past, I took this class. It wasn't called 421, 520. It was called something else. But it was these assignments. It was at a different place, a different time. And this is what really got me hooked on computer systems. It got me hooked on computer operating systems. At that point, I was studying physics. That was a mistake. And this course really helped me steer to the right path. And I discovered through doing these assignments that I really loved building computer systems. And that was the fatal blow that set me on this particular course. So you guys should think about this right now because this class can be transformative and really change your life. It changed my life. And if you don't want to end up like me, you might want to think twice about taking this class. So people who have taken this class have gone on to do other things. And we'll talk a little bit about those people later. But so this class is the reason I'm teaching this class. And that makes me really happy. So OK, so why are people taking this course? We have a big group this year. Somebody volunteer. I know for undergraduates, it's a requirement. It's not required that you take it in the spring of your senior year, though, which you may have mixed feelings about. So for the master's students, undergraduates who are here, why are you taking this class? What do you hope to get out of it? Anybody? Yeah? Learn how an operating system works. Learn how an operating system works. OK, that's good. Someone has read the course description carefully. And we will do that, definitely. I hope that this class is more than that, but we're definitely going to talk about how an operating system works. What else? How about a master's student? There are 80 master's students in this room. Why are you taking this course? Anybody? Apparently, there are 80 shy master's students in this room. I will happily pick on somebody. You're not a master's student. Let's see. Who is a master's student? Raise your hand. There we go. Why are you taking this class? You've heard good reviews. OK, some of those are probably exaggerated. And I just want to warn you that everything we've been doing for the last four years in terms of some of how this course works, we destroyed this year and we're starting over from scratch, so I'll get to that later. But the material is the same. The methods are new. They're going to be better. They may be a little delayed, but we'll get there. Anyway, so OK. So let me introduce you to the course staff because, like I said, this is by far the most important part of today's class. So every year, I feel like the course staff for this class gets better and better and better. And this year is no exception. So we have an awesome group of people. These are people that I think a lot of you guys will develop relationships with during the course of taking this class because they are going to help you. They will guide you. They will commiserate with you. A lot of them have taken the class over the past couple of years. So they have deep, personal, painful, potential wounds from this course that you may reopen. And that may cause them to really stick in there and help you guys out. So essentially, you can divide the course staff roughly into two groups. So we have actual teaching assistants, official teaching assistants. So Jerry's in the back there. Raise your hand, Jerry. Actually, why don't you guys just? Well, I'll have you guys come down later and answer questions. So Jerry's one of our official TAs. Ali is another. Ali, stand up. And Zhu, I don't know if he's here. He was just added. OK. So these are our three official teaching assistants. And these guys are going to teach recitations. And they are going to grade things. They will also help open office hours. But this is sort of their primary responsibility. Happily, we have two other groups of course staff. One are the unofficial teaching assistants. That includes Ye Hong, who's in the back there. Scott, Hasley, Carl, Guru, and Jinghao. So in various capacities, these guys, these are all sort of members of my research group. My group takes teaching this course really seriously. A lot of the people who work with me now as PhD students, I met and sort of developed an interest in computer systems through taking this class. So they're all involved through different capacities. They'll probably see them in office hours. And they're also actively involved in building some of the new shiny tools that we're going to have you guys use this year as part of the course. Everybody took this class in this group. And most of them in the last couple of years, well, I guess everyone took it in the last couple of years because I've only taught it four times. So these guys, again, I mean, they are great. They will be really helpful in terms of understanding the assignments and giving you guys help with that. Finally, last but not least, we have what we refer to as ninjas. So the ninjas here are all undergraduates who took the class last year. And at the risk of violating some sort of the FERPA, or some sort of rule, I'm going to reveal my algorithm for choosing ninjas for this course, which is that I get out the grade book from last year and I sort it by grade and I start at the top and I send emails until I get as many ninjas as I want. And so here are the people we have this year. Dan is Dan here. Sweet. Dan Conway, Gaila. Gaila's right here. Isaac. Ben. I saw Ben, there he is. Mark. And last but not least, Yusuf. They're in alphabetical order. So Yusuf is always in the bottom. So this group is going to be primarily helping out with office hours. They're also, again, helping us with some of the hacking that we're doing this year to improve the course infrastructure. And they will be super helpful. So let's give an early but not premature round of applause to the course staff for all the help. You guys are going to get this semester. Okay, so let's talk about the material in this class a little bit. So an operating system is a computer program. That's the first thing that I want you guys to realize because a lot of what I try to do in this class and in general, I think a great way to approach computer science is just to try to demystify things. So there's nothing special about an operating system. It's a computer program like other computer programs you guys have written before. It consists of instructions that the computer executes. Now it's a special computer program in a lot of ways. It has special responsibilities and you notice a little bit more when things go wrong but it's just a computer program. You're going to be writing computer code this semester that's going to compile down to a binary consisting of execute. Executions that are executed by a processor. So there's nothing special about it but it has a couple of key responsibilities that have a lot to do with how an individual machine performs. So one of the things that it's in charge of doing is multiplexing hardware resources. Does anyone want to take a guess at what that means? Multiplexing hardware resources. Yeah. Okay, so that's a great answer. It's not quite correct though. So we have the idea of multiplexing where, what's your name? Sean has pointed out that multiple hardware devices frequently have to actually contend for other hardware devices, in this case a bus. And I think to some degree at a low level, software that's usually included as part of the operating system is responsible for this. But an operating system when it talks about multiplexing resources, usually means sharing them between multiple programs that are running on the computer that all want to use them and making sure that this can happen safely. So your computer has one, probably a small number of hard drives, only a limited amount of memory, and a small number of processing units, and making the machine go fast and making everything sort of seem to happen smoothly involves making sure that these resources get allocated effectively to all the different things that are running on your computer. The second thing that operating system does, it's not entirely overlapping with the first, is it implements useful abstractions. So a lot of operating system code is dedicated to hiding or somehow improving on the low level hardware realities. So for example, file systems, which we're gonna talk about in the future, are designed to provide an abstraction that you can just make a file grow bigger and smaller as much as you want. When at the end of the day, what's actually being allocated and deallocated are contiguous blocks on disk. So making those look like it's this thing that can grow and shrink and it has a nice name that you can find and things like that. Those are really all abstractions that are not provided by hardware. All the hardware disk does is store chunks of, just store chunks of bytes, that's it. Everything else that you associate with how files work is something that's implemented in software traditionally as part of the operating system. Okay, so I got as I pointed out some of the fact that these are the operating system's responsibilities means that despite the fact that it is just a computer program, it is also important. And the degree to which these things are done well really has a lot to do with how well the machine works. So let's step back a minute here and ask ourselves who cares, right? So this is a course on computer operating systems. Why would we study computer operating systems? So how many of you guys have ever written a line of code that appears in some operating system? Raise your hands. Okay, so that doesn't make the course seem very useful, right? And actually I would also point out if I asked the alumni from this class, I think the number of hands that went up would be about the same actually. So it's not that you guys aren't ready. How many of you regularly in programming languages that use operating system abstractions directly? So how many of you guys have made something that you were actually aware of was a system call? Okay, I've got like three hands up. How many people have even know what a system call is? Okay, still a few of you. Now, here's the thing, that's awesome. The fact that there's so few hands up and so many computer programmers in this room is a sign of progress. Because if you're a sane human being, you're not writing code anymore in languages that force you to lose these lower level abstractions. Your life is too short, stop writing C code, okay? Like write in Python or Go or something better. There's so many better languages out there. C is terrible, right? And you're gonna write it all semester awesome, right? So I'm serious, like when you guys are doing things on your own, please don't misunderstand the point of using C in this class. C in this class is appropriate for what we're doing. C is a language that's appropriate for almost nothing anymore, okay? Just stop using it. Again, computers are so, so powerful and we've made so much progress in designing better languages. Stop using these languages, okay? So why are we studying operating systems, right? Why is this course required for the undergraduates and why are so many graduate students willfully subjecting themselves to this completely sort of pointless material, right? You can go your entire life as a computer programmer and not understand exactly how an operating system works and write code that changes the world, solves important problems, makes a lot of money, whatever it is that you wanna do, okay? So here are my reasons, right? The first reason is that on some level, this is truth. This is how the world works. This is how the computers that you guys use work at a low level. And so from a scientific perspective, isn't it interesting to know how things actually work? There's a pleasure to finding out how things work, for real. Despite the fact that that might not actually change how you write your Python code, right? The second reason is that operating systems are everywhere and to some degree, at some point, when you are trying to save the world or make your million dollars or get your startup off the ground or whatever, you may run into limitations of computer systems and the material in this course may come in handy. But this is my favorite reason. My favorite reason is simple, which is that operating systems are examples of mature, elegant, beautiful systems that have been designed and implemented and redesigned and re-implemented and rethought, uh-oh, lights are going off, over decades. So this is kind of the equivalent of studying like the great masters of painting or something like that, right? These are extremely well thought out systems and you can learn a lot about how to build anything from studying really, really good examples of how things are built, right? Okay, so now I've motivated at least the reason why we're gonna study this stuff but a lot of what you're gonna do this semester is actually programming a small instructional operating system, so why bother with that? That's a pain in the neck. You guys are gonna find that out. So one of the, and again, sort of why engage on a semester long, 60 hours a week, incredibly eventually futile programming exercise in a stupid, low level, archaic language, right? Just to satisfy me of all people, right? So the, and I think the reason is, well, I mean, you're gonna learn something from this, trust me, right? These, the operating systems are hard to get right. They stress the value of design. That's one of my favorite things about this class. If you're the type of programmer who just likes to plunge in and let's just create some bugs and then we'll just fix those bugs and that's how I build things. I just, you know, and I, hey, I'm not, don't put that past me. I do that all the time, right? But you have to know when it doesn't work and it doesn't work here, right? If you start off without a plan, you will regret it. And it basically, what you'll end up doing is coming all the way back to the beginning and then making a plan because it's very hard to make forward progress on a big complex system like this without having some idea what you're doing, right? Debugging with printfs is not going to work or not gonna work well. The other reason is these are hard. I'm gonna give you a huge blob of code that you have to, at least to some degree, understand pieces of, augment, and get to do certain things. And this is, to some degree, I think, at least in our program and a lot of computer science programs, not a common thing. You guys are probably used to starting with little bits of skeleton code that some professor gave you and maybe there's 50 lines there and you have to add 10 lines to those 50 lines and then, you know, it works, right? I'm gonna give you like 10,000 lines and you have to add 100 lines in the exact right places in order to get things to work. Actually, you might have to add several thousand lines. So this is kinda fun. Debugging, right? Invariably, the first, you know, the first D, your design phase, is not going to work and you are gonna find strange, unforeseen things that are happening and you're gonna have to find out what's happening and fix them. And that is incredibly hard on an operating system because, to some degree, when you guys have been debugging code in your previous classes, you've been relying on features that the operating system is providing you. Now you're trying to debug the actual operating system, okay, and that introduces a bunch of new complications. Okay, so how the course works. We talk about concepts in class and in recitation, recitation is kind of the meeting point where the conceptual material that we talk about in class, I don't do code in class, right? I don't show you how to do the assignments, we don't go over code together, whatever, right? In the class, we talk about how things are built and why they're built that way and you guys get a chance to build these things yourself and recitations is kind of, again, a mixing ground where those sort of the practical realities of what we're asking you to do come face to face with sort of the concepts that I'm gonna talk about in class, okay? And then you're gonna write a lot of code, right? So my objective is for you, when you're done with this class, this is, again, I'm sorry, this is kind of dull, but I just want you guys to know sort of what my goals are, right? You're gonna understand the abstractions that are provided by modern operating systems. You'll be able to talk about and explain how operating systems multiplex resources because this is the real interesting thing. This is the, these are the ideas that are really, you're gonna carry forward that are gonna help you write better code in the future. You'll be able to have some perspective about how operating systems have evolved in particularly with their relationship to hardware, which is a really neat story. And the way that we know that you're doing this is you come to class, you come to class, you come to recitation, you know, please speak when you're called on, raise your hand, and we test you on exams. So that's one half of the class, maybe half, maybe a little less than half. Okay, so I'm not gonna go over this in detail, eventually this will be online, but we're gonna talk, essentially the course is organized around sort of the three big units are on the three big parts of the computer that the operating system is in charge of multiplexing. So that's the CPU, memory, and the disk. This year my goal is to actually do a lot less on storage, which I've always thought is not, well, I don't know, it's grown on me over time. And more on virtualization. So I think virtualization is both really cool and super important, right? If you look at what's going on in Silicon Valley and other places, there's an enormous amount of energy around virtualization and new virtualization techniques. So I'd like to do more of that this year. So we'll probably do that at the expense of the storage unit. Okay, so again, how do you learn the concepts? Come to class, I try to start right at 205, ask questions. I don't have a strict roadmap for how much we do during class. If there's an interesting discussion that starts up, or if people are confused, or if I'm doing a particularly bad job at explaining something on a particular day and you're happy to point that out, we'll spend as much time on the material as we need to on a day-to-day basis, right? I don't really care where we end up. It's not gonna vary that much. But when you guys are, here's the thing, right? I mean, you guys are sort of all sitting there staring back at me. I have no idea what's going on up here, okay? Let me get some smiling, you're nodding or whatever, and I'm trying to figure out like, maybe they're having a good memory, right? Maybe they're going to their happy place, right? Maybe their eyes are about to close, right? They're having a really happy memory, and they're just gonna, so I don't know. And you guys really have to help me. And again, just please raise your hand, speak up, just blurt out things. How things work in here is very informed, okay? I don't assign a textbook for the class. There are a couple of books that you can, if you want to get your hands on and look at. I don't assign reading from them. I think there's plenty of work in this class already, so I'm not gonna, you know, layer on something else. Modern operating systems is kind of the canonical text on computer operating systems, and certainly is highly complementary to what we do. And the C programming language, I mean, Kernighan and Richie, a classic. Is it actually in its third edition? Now it might be, right? Or maybe it's still in its second edition. Two editions in like 60 years, right? I mean, that's a modern classic. It's also a sign of how little C has evolved in 60 years, right? Which is another reason. Don't use C. But you will probably find this helpful, particularly if you're not familiar with C or have a difficult time with some of the concepts there. But one thing I want to point out is that lectures are the source that I use for exams and anything else. I will never quiz you or ask you on an exam to cover something that was not covered in lecture. Okay? All right, so any questions up to this point? I'm gonna try to get through this so we have time for some questions at the end. I don't know how I'm doing. There's of course no clock in this room that's useful for me. Ah, there we go, okay. Questions at this point? Yeah? What do you make available online in terms of lecture material? Everything, eventually, okay? So look, this slide deck, this is actually a webpage I'm just serving for my local computer, okay? So I'll get to that later. Last year, everything was online. All the slides, both in slide and outline format, there are four years of lecture videos on YouTube that are already up there. We post lecture videos pretty much immediately after class as soon as I get done with sort of transcoating them and uploading them, so they're all there. You can decide if I've gained weight since 2011 or whatever, I don't know. You can see as we move through a progression of equally dim and ugly classrooms. Anyway, yeah, so as much as possible, right? We're not trying to hold things back. I have, eventually, we'll get the old exams back online and everything, so really, we try to just dump everything onto the website. Yeah, it's a great question. Question down here? Yeah, so. So does the YouTube video still be that kind of flow? Yeah, yeah, let me come back to that and I'll be more clear about it, but the material's not different, the code base is not different. What's different is, anyway, we'll have some story time later and I can tell you about the four years of sadness and regret that followed my initial development of the tool chain for this course. And then finally, this year, it's over. I feel free and nothing works, right? But whatever, well, it will. And I'm a better person now. I feel like a great weight has been lifted, honestly. I don't know why that just went, oh, this is one of those things I always forget on day one. Turn on, turn on caffeine. Okay, yeah, let me come back to that. The class is essentially the same. How you submit things and how they're graded and things like that, and I think some of the grading we do in the assignments may change, but the assignments are the same, the instructional operating system is the same, the materials are the same, the lecture slides are the same. And so yeah, this is essentially the same course, right? We're just trying to fix some of the issues that we've had in the past that were the result of doing things in an incredibly dumb way. Okay, so now let's talk about the programming objectives. So when you guys are done with the course, I want you to be able to design and implement well-structured system software. And this is broader than just operating systems. This should be any large computer system, okay? Utilize appropriate synchronization primitives. This is something that we get to push on really hard in this class because the operating system is inherently an extremely high concurrency multi-threaded beast. And so in order to get things to work properly, we'll have to learn how to do this. How many people have done any multi-threaded programming? My hopes for the future are that like five years from now, everybody's hand will go up, right? If I was in charge of doing the intro class, you would, but anyway. Because it's not like computers have multiple processors or anything. Okay, so yeah, we're gonna do this. And then debugging. So identifying correct bugs and complex multi-threaded systems. We're not gonna give you any bugs to identify. We don't need to. You're gonna produce plenty all by yourselves, right? And finally, and this actually, this year I think we're gonna do more at. So we've always talked about performance. We've never really had a good way to evaluate performance. This year we're building a new tool chain that will allow us to evaluate performance. And I think there's a group of people in this class. Some of you know who you are already and some of you are going to be surprised to find out that you are this person who are gonna get extremely competitive about how your operating system performs. And we are gonna feed that, right? We're gonna feed that with a website, with a big list of everybody's kernel and how fast it ran. And you're gonna be up like three in the morning and you're gonna be thinking to yourself, what is wrong with me? I already have 100 out of 100 on the assignment. Why am I still working on it, right? And it's because you're in second place. You're in second place. Anyway, so yeah, we're gonna do that. That's one of my goals this year. And that's one of the reasons we're moving to some of these new tools. This, again, we're gonna give you these online testing resources. Please use them. And the programming assignments are how we test for mastery in this class. So let's talk about those programming assignments. How many people have heard about the programming assignments in the class? All right, good. Now these due dates right now are tentative. These are not, and this will somewhat depend on how quickly we can get some of this stuff for you guys to get going, okay? Assignment zero is really easy. In fact, I'm thinking maybe it won't be worth any points this year because it's almost too easy. Just getting comfortable with the tool chain, getting things set up, building your first kernel and running it in the simulator. Assignment one, last year what we did is we had these do it together just because of how easy assignment zero is. Assignment one, we're gonna start introducing you to synchronization primitives and have you implement some of them in your kernel and then use them to solve some toy synchronization problems. Those are probably, actually probably, those are the only time in this semester that we will ask you to write code that's not going to be part of a later assignment. And it's just because these are sort of a nice way for you to get your hands to already solving some synchronization problems that are similar enough to the real synchronization problems you'll have to think about when you get to the hard assignments. So this will take us sort of into mid February and my goal is to get these out there. My goal is to get assignment zero at least posted by the end of the week so that you guys can see what you're up for and get started because there's a lot of setup to do and stuff like that. Anyway, it's all really well documented. Okay, so this is time for a video break. You didn't think it was gonna be that easy for a second there? Yeah, I kind of did. Yeah, so it's not quite that easy, right? There's a lot more. This is just sort of a warm up, right? This is like the part in Kill Bill where she's just finished off down here and then you hear those engines, you know? Anyway, it's a really violent movie. I don't know why I have a slide about it, but it's a great movie. So then what we do is we go on into the two big and really exciting assignments, right? So assignment two, you get to implement the system call interface for this kernel that you're building, and then for assignment three, you get to implement virtual memory. And assignment three is really the crucible of the class and it is by far the most fun assignment. Again, if there was one thing about this class that really got me started down this road, it was assignment three, right? The rest of them are fun. Assignment three is a chance for you to really design a very large piece of software with a lot of internal interfaces and a lot of complexity. There's an enormous amount of design decisions to make and it is super fun when you get it to work. It's just an incredible sense of satisfaction. Okay, I probably should have had this slide earlier. So the instructional framework that we use for this class is an instructional operating system that's called OS 161. So this has been developed at Harvard now for over a decade by a guy named David Holland. Operating systems courses kind of have this balance that they need to strike. So for example, I could have you hack on Linux. The learning curve for Linux is like a rock wall. It's like El Capitan, right? I mean, it's just too hard to get anything done in Linux. Linux is like a billion lines of code. And here's the other problem with Linux. It already works. So I can't ask you to go implement virtual memory in Linux, that's already done. So a lot of times when classes use Linux, they do these little toy assignments like change the scheduling algorithm, something that is kind of stupid. On the other hand, there were also these existing operations and frameworks that weren't quite realistic enough. So OS 161 is extremely nice. It's a small kernel, it's heavily layout is really based on BSD. David Holland is a big contributor to various BSD releases. And it runs in a simulator. So that's the other thing. Now that we have better virtualization techniques, we might have been able to do some fun stuff using that, but back when this was being developed, the idea of running this in a simulator is very attractive. So you build a kernel, we give you a working simulator that will boot that kernel, and you're now in charge of implementing all these features. So the kernel we give you does not have virtual memory working, it does not have the system call interface implemented. So it really doesn't do anything yet. It has a little cheeky kernel menu that no real kernel has, just to give you a chance to get your hands dirty. But one of the things you're gonna do in assignment two is actually get to the point where it can run user programs, and you can actually run a shell. So you get it to the point that the real operating system would start out with, where it's gonna boot a user program, and then everything's gonna start from there. And sys161 just makes it a lot easier to debug the kernel, and it provides a really consistent environment for you guys to use. Okay. So where people tend to spend time in this class is on the hacking, right? Getting things to work, working on the programming assignments, and I wish I could say that it was easy. It's not easy. I'm not entirely not proud of these scores, I have to say, I always put them up every year. So one of the categories in the course values should used to be appropriate workload, right? I always thought that was a little weird. Appropriate to what, right? I mean appropriate to not having to do any work, right? So the score, we typically get pretty bad ratings on whatever sort of appropriate workload score that people give us, but the class gets awesome ratings overall, right? So I just wanna give you guys some context. The reviews in general are very good, right? You wanna see this guy, the crying guy? Crying man, Google it. So this is feedback from 2013. I think students in general really appreciate the class, let me also just say something upfront, which is that we have done our best, I have done my best to try to limit the workload for the course to the greatest degree possible without sacrificing the learning objectives. So in the past there were some sections in these assignments that we've got rid of that I kind of thought were a little bit more like busy work, those are gone. So there's a lot of work in the class, I'm not gonna apologize for that, but I'm not giving you work just for the sake of doing work. I'm giving you work that I think is going to help you improve as a programmer, learn what we're trying to learn in the class, and et cetera. All right, any questions about the course content before we go on to the even more exciting policy section of day one? Any questions? Okay, the website, last year I was so proud of this slide. It was like the website's ready, it's never been ready before, it's all up and then this year it's over. Okay, so essentially there were things about, so when I started, let me just tell you a little story. So when I started teaching this class four years ago, I was like, I'm gonna set up a website. I had no idea what I was doing and I built this terrible website. It did 20 things, it did zero of them well. And it was just this stinking pile of code that every year I would kind of poke it and it would kind of struggle to life again and then people would report the same problems they had the year before and I'd be like, you know what? I'm not fixing that because I don't know how it works. There's no way, if I try to change something, one character change might have completely ruined the whole class because nothing would have worked again. So after four years of sort of putting up with that, I finally just put the torch to it this year. So we are not gonna use that old tool chain. Now here's the great thing. A lot of the things that that website was doing, we don't need to do anymore because they're done by other software packages. So for example, this year, we're gonna have you guys use a GitLab instance that we host to store your Git source code. GitLab is awesome, it has all these features that were built by other people that work and therefore I don't have to worry about that anymore. It just works, it's awesome. So that's gonna be most of it. We're gonna figure out how to do some of the other pieces but I am confident that what's gonna come out of this is gonna be way better, okay? The other thing that we're doing is we're, and Scott and I have been working on this and some of the other TAs are gonna get involved as well. We're building a brand new testing tool that's going to allow you guys to do a lot more local testing before you submit things. So my goal is modulo you trying to cheat and game our grading system. You should pretty much be able to know exactly what your score is going to be on an assignment before you submit your code to the online grader because you're gonna have essentially the same toolkit that we're gonna use online for running tests, processing the output and figuring out if things work, okay? So that's gonna be new. I think that's gonna be pretty cool and that's gonna be useful, okay? Yeah? So let's submit more and more. Of course, yeah. So that's, yeah, let me, ooh, unhappy. So, yeah, let me come back to that. Okay, sorry, I'll get to that in a sec. Okay, so again, if this interferes with the deadlines, we'll adjust the deadlines. I'm certainly not gonna penalize you guys for our own ability, you know, sort of our own inability to get things out on time. But my goal is to have assignment zero again out by the end of the week so you guys can start, right? Some of the other tools will not be ready by then, but they'll come, they'll follow and you'll have them by the time you need them and they'll certainly have them by the time we expect you to need. Okay, so quick breakdown of grading. Half and half, half conceptual, half programming. Those are how the assignments break down right now. So on Wednesday, we do this thing every year that's called the preterm exam. It's about 15 minutes of your time usually, although some people get really competitive about it and decide to take the whole hour. Essentially, what we're trying to do is figure out what you guys already know. So we'll do that on Wednesday. During class time, you know, it's five free points, percentage points basically. So if you come and you do a little concept battery to allow us to sort of understand what people know when they start the class. Other than that, this is, I think, sort of pretty standard. Okay, so as, what is your name? I know your name and I've forgotten it. Zach? Yeah, so what Zach asked is, what about can I submit things multiple times? Of course you can submit things multiple times, right? Anything where the grading is automated, you can submit multiple times and that's the bulk of the points on most assignments. So essentially how it works is that we're gonna build a tool for you guys to use at the command line. When you want to, you can use that tool to submit things to our online grader. That'll run all the tests in an environment that we trust. It'll give you a score. If you've submitted one minute before the deadline, that's the score that you live with. However, if you've submitted a day before the deadline or a week before the deadline, you can say, hey, I like that score, I'm just gonna stop right there. Or you can say, and there's a few more points I saw at the table, I'm gonna keep going. So again, there's no reason for us not to do this. This is how, it helps you guys learn. And again, now what I'm hoping to is that you guys will see your performance numbers. You're gonna be like, my kernels dog slow, I should fix that and go back and work on that as well. But essentially, the grading for this class, we try to be as transparent as possible. You should know the grade that you're getting on each assignment. That also tends to cut down a lot on arguments about grades. The hand graded parts of the assignment this year, I'm not exactly sure what we're gonna do about that, but we'll let you know. In the past, the policy has been that those could be only submitted once because we actually have to have a human being grade them. But we'll see you this year. We may try to automate some of that as well. Assignments in this class are done in pairs. That's probably one of your to-do items for this week, is to find a partner. Your partner in this class, that's a pretty critical decision. You need to find someone who, one of the conversations to have with your partner is, how well in the course do you want to do? Because if you want to do well and your partner doesn't, that can be a source of conflict. Working alone is not something that we're gonna allow you to do unless, extremely, there's been a couple cases where this has happened and I won't divulge them in hopes of not giving anyone any ideas. But I want to work alone is not one of the unusual cases that we represent. The other thing about the class is that the assignments are cumulative. So this is something to keep in mind. If your assignment two doesn't work, your assignment three is not going to work. If your synchronization parameters don't work for assignment one, it's gonna be really hard to do the other two assignments. We have been distributing solution sets in the past. However, we are going to take more points from you than you're gonna be happy about. The goal here is to encourage you guys to do the assignments, to do them well. And so that's the source of this policy, right? And so particularly when we get to the assignment two deadline, I always tell students you have two choices. You can fix your assignment two bugs now and you can get points for them or you can fix them later for assignment three and get no points for them on assignment two, right? So that's kind of how it works. All right, we're gonna have a mass email list. We're also gonna try not piazza this year. I'm kind of tired of piazza. There's things about piazza I find incredibly irritating. And so we're gonna, we have a discourse bulletin board set up that you guys will have accounts for. And one of the things I don't like about piazza for this class is that in a lot of cases there aren't right answers about how to approach some of these problems. And I think piazza tends to encourage people to take those one answer to the question. I mean, that was true when you were five, but now that you're writing the sort of systems code it's not. Okay. Let me just breeze through this quickly. There is a course staff email list. Please don't send us email if it's something that you can find some other way. And particularly once we have the website and the forum up please use those, don't contact us. The course staff works really hard. They're gonna be in office hours for four, five, six hours a week. They're gonna be doing a lot of work behind the scenes to build some of the things you guys are gonna be using. The more we have to answer repetitive questions, the less of that other stuff we get done. Same thing for me, right? So if you email me please be very certain that this is something that really needs my attention and can't go to the staff email list because there is one of me in 14 TAs and ninjas and so your likelihood of getting a response for me is lower. Okay. So Ali and Jerry will be doing the recitations. We're gonna start those next week. Those will be on the calendar that we're gonna post. As I pointed out, they cover a mix to the sort of conceptual and the assignment driven material. And this year we'll probably try to do some screencast. We've been recording the recitations last year. I think for the last two years. So if you wanna watch Jing House recitations from last year, you're certainly welcome to do that. Those are all online. Okay, office hours. So office hours is really the place where we try to provide you as much help. So my contract for the class with you guys is I'm gonna give you a lot of work to do but I'm also trying to give you as much help as possible. That's why all the students in my group are involved. That's why I've pulled favors from all these awesome ninjas and had them come back and help you guys out. So we're trying to give you as much help as possible. I don't want you guys to feel like you can't do the assignments because you didn't get enough help. So last year I think we had about 40 hours of office hours a week. It might have been like 40 person hours or something but it was a lot. So there's definitely a lot of time for you guys to come in and get help. And my suggestion is just do the assignments in office hours. Just like come hang out, you can hang out in my lab, you can hang out in the hallway, you can hang out in that tiny little room that we have. And just work there. You don't need to have a question. You'll have a question once you get started. You'll get stuck and then you're in the right spot. And even if you're not stuck, it's fun to be around other people who are doing the same stuff. You'll hear some things that will be useful to you or whatever. So just when you're working on the assignments, come to the location where we're having office hours. It's always the same place. I just hang out there, right? Okay, partners are jointly responsible for joint work. If any part has plagiarized, both of you guys fail. Let me just point that out again. If you have concerns about something that your partner has submitted, please approach us right away. The longer the time goes by, the more we assume that you were somehow complicit, okay? I've got like two minutes and let me do, and the assignments are very clear. So each assignment has a section that says, here are things that we encourage you to do collaboratively. Here are things that don't encourage you to do, but they're not cheating. And then here are ways to cheat on this assignment, right? And these are the things that you do. If you do those things, that concept is cheating. So there's no gray area here, okay? If you think you've found one, come talk to us and I'll add a clarification, right? This has happened in the past, but I think at this point, we've sorted it all out, okay? On the other hand, please don't be shy about helping each other on the forums, in office hours. You know, the general approach here is that when people in this class work together with each other, they do really well, right? They enjoy themselves, they have fun. As long as you're not sharing code, as long as you haven't cut and pasted your code and sent it to someone or you're allowing them to like look over and memorize it. I've had people tell me when they got taught cheating that they memorized something that they saw over someone else's shoulder, I'm like, yeah, right. You know, I mean, maybe you're like Rain Man or something, but I don't know why you're taking this class then. Okay, so this is the rule about collaboration. If you share code, you're cheating. If you're talking about a problem, you're not, right? Unless you're talking with your partner. We take cheating very seriously. Every year I end up failing a couple of people because of cheating, I hate it, but I will do it mercilessly because there are people in this class who are gonna do their best and work their butts off and they're gonna get like an okay, great. And if you think you're better than those people for some reason and you should just get a free pass, then I disagree, right? And I'm like that guy, okay? I'm gonna find you and when I find you, I'm gonna be like her, all right? I'm gonna be mad. I have, this is the best thing after teaching this course for four years, I have the world's largest library of assignments that have been submitted for this class, right? I have hundreds of them, okay? If you think you found something that I didn't, just think, think about it for a minute, right? Just think about it for a minute. I look everywhere, right? And we use Moz, the same tool everybody else uses. We have tools in place for doing this on a really large scale. We'll test everything you guys give us. Just don't cheat, please. I am begging you. I would love to have a course one year where no one cheated. That would make me so happy. It hasn't happened yet. Maybe this will be the year. Okay. So, see, this guy, he got an F. This is the policy about cheating, okay? The most interesting man in the world? I don't care, also failed, right? This cute cat, yeah, she's unhappy because she got an F in the class. Tom Brady didn't cheat on the football field, but got an F for cheating in this class, okay? Mother Teresa, come on, not really. Mother Teresa didn't cheat in the class, right? This guy didn't cheat, now owns own business, right? So, that's your choice, right? But again, I am begging you, please don't cheat. All right, any questions about this? Okay, inclement, whether bubble schools are closed or wanna have class, yeah. Are you allowed to use snippets of C code that you found? If you find something online and you wanna use it, talk to us. In general, the answer will be no. Yeah. It's not just like single line, like C hacks, where is it? We don't, yeah, we don't catch that stuff. What are we doing? Yeah, yeah, we're looking at hundreds of lines here. If there's inclement, whether you don't have to be here, but Yee Hong will be here. I just wanna point that out. Yee Hong has never missed office hours. Okay, so, buh buh buh. All right, so sit tight for more details. On Wednesday, two o'clock, preterm exam, this room, five free percentage points. Yeah.