Skip to content

Academic Integrity and AI

This page is the long version of the integrity policy in the syllabus — the reasoning, not just the rule. Read it once in week one. It explains why the programming in this course happens in the room, what you are positively encouraged to use AI for, what OSlings records about your sessions and why, and what happens when you miss a session or do not finish in it. If you are trying to decide whether something you are about to do is allowed, the tables below are the short answer.

The uncomfortable fact this course is built around

rv6 is modeled on xv6 and on Octox. Both are public, both have been on GitHub for years, and both are in the training data of every large language model you have access to. A model can produce a working page allocator, context switch, or fork for a kernel of this shape in seconds, without you.

That is not a suspicion about you. It is a fact about the material, and pretending otherwise would insult everyone in the room. It is also precisely why the programming happens in class. If the exercises went home they would be an honor-system exam with the answers already published, and the only students disadvantaged would be the ones who did the work themselves. Doing the work in the session removes the dilemma instead of policing it.

The corollary matters as much: because the structure carries the integrity, you are not under individual suspicion. Nobody is being watched for signs of cheating. There is no plagiarism scanner pointed at your commits.

The rules

Where Exercises are worked in the session, in the room, on your own keyboard.
When During the session. An exercise is released at the start of the session that works it, so there is nothing to pre-solve.
What During a session: no Internet beyond GitHub and the package registry, and no AI assistant.
Whose The code you submit is yours, and you can explain any line of it.

AI: it depends entirely on when

The dividing line is the session, not the tool and not the question.

Outside a session — encouraged During a session — not
"Explain what an ASID is and why Sv39 has one." Any AI assistant, for any purpose
"Walk me through this unsafe block I am reading." Editor autocomplete that writes code for you
"What does this borrow-checker error mean?" Pasting an exercise README, or an error, into a chat window
"Give me five practice problems on page-table decoding." A browser tab open to anything but the docs you were given
"Compare Cell, RefCell, and UnsafeCell." A phone doing any of the above

Outside the session, use AI freely and often. Ask it to explain a concept, walk you through code you are reading, decode a compiler error, generate practice problems. It is genuinely good at that — available at 2am, infinitely patient with follow-up questions — and the reading and preparation you do between sessions is where most of that happens. None of it is discouraged. Some of it is the assignment.

During the session, you work with what is in front of you: the lecture notes, the Prep page, the guides on this site, oslings hint, the compiler, and the two people paid to be in the room with you. Nothing else.

The reason for the line is not suspicion, and it is not that asking a model to explain something is wrong — outside the session it is encouraged on this very page. It is that the exercises are small, the sessions are short, and a model that is right there will answer before you have finished being confused. Being confused for four minutes and then not being confused is the entire mechanism by which this material goes in. The room exists to protect those four minutes.

Classmates: same shape

Explaining a concept to someone next to you is good and welcome — talk about how the scheduler picks the next process, draw the page table on the whiteboard, argue about lock ordering. Handing over your code is not, in either direction, including "just to look at". A person who reads your swtch and then writes their own from memory has learned something. A person who copies it has not, and you have taken that from them.

Progressive hints exist for exactly this reason. oslings hint gives you the next nudge without giving you the answer: two hints are released per exercise, and the third — the one that spells out the code — is never released. See Using OSlings. Asking the TA or the instructor is always in bounds and never counts against you.

Why exercises are not released early

Not a date, not a flag, not an honor request. An unreleased exercise exists in no commit you can fetch. The course repository gains one exercises/<name>/ directory and one info.toml block at the start of the session that works it, and you pick it up with oslings update. Before that moment there is nothing in your repository to read ahead, and nothing to spoof.

instructor repo (private, every exercise + every solution)
        │  oslings release <name>   ← at the start of your session
course repo (public read; each session adds the new exercises
        │                and the solutions whose deadline has passed)
        │  oslings update
your private repo

This design is deliberate about the AI problem: a skeleton leaked early would be an AI-solvable skeleton, so absence is the only gate that actually holds. The same gate holds solutions back. The reference solution for an exercise is released with the next exercise, after its completion deadline, into exercises/<name>/solution/, and oslings solution <name> prints it. Until then it is in no repository you can clone — see Solutions.

The classroom network

Sessions run on a restricted network: GitHub and the Rust package registry are reachable, because oslings update and oslings submit need the first and cargo needs the second. Most other things are not. At the start of each session you register your laptop with the CS 326 class server on the classroom router; the tool for this is not ready yet, and instructions will be given in class. Point rustup doc at your browser for the standard library offline, and use the guides on this site — they were written so that the restriction costs you nothing.

The restriction is not airtight, and this page is not going to pretend it is. A laptop with a phone hotspot defeats it completely, and no router configuration can detect a second interface.

Which is exactly why the rule is written as conduct rather than as a claim about the network. Reaching the open Internet during a session — by hotspot, by phone, by anything — or using an AI assistant during a session, is an academic integrity violation, whether or not the network stopped you. The router is a convenience that saves you from having to resist a browser tab. The rule is the rule.

What OSlings records

Disclosed here rather than collected quietly. When an exercise passes, OSlings writes submissions/<name>/oslings-meta.toml next to your snapshotted source (snapshot_submission in oslings-cli/src/model.rs):

exercise = "37k_spinlocks"
passed_at = "2026-10-29T18:42:11Z"
passed_at_unix = 1793299331
difficulty = "guided"
hints_used = 2
session_started_unix = 1793295802
elapsed_secs = 3529
test_runs = 14
Field Meaning
session_started_unix When you first ran the test for this exercise
elapsed_secs From that first run to the pass
test_runs How many times the harness ran
hints_used How many hints you revealed

The clock starts on your first test run, not on the wall clock of the session (State::note_test_run in model.rs), which is why a slow start costs you nothing.

This is never scored, never ranked, and appears in no report the course produces. It is not a productivity metric, and a long elapsed_secs with a high test_runs is what a hard exercise honestly looks like. It exists so that if a question ever arises about one submission, there is context for a conversation — a starting point for a discussion, never proof of anything.

You can read the file; it is in your own repository. Editing it changes nothing, because grading re-runs the real harness against your snapshotted source rather than trusting any recorded state (stage_from_dir in model.rs, called by oslings grade). See Git and Submission for what else lands in your repo.

Understanding what you submit

Submit only work you can explain. The TA or instructor may ask you to walk through code you turned in — this is normal, it happens to people who are doing fine, and it is the conversation you would have in an interview. Not being able to explain your own submission is treated as an integrity matter, and it is the one signal that does not depend on any of the machinery above.

Missing a session

Missing class is not an integrity problem. Here is what happens to the exercise.

Situation What happens
Unfinished in class Run oslings submit before you leave anyway: a compiling, meaningfully attempted exercise scores 50%. Get the test green by the deadline — Thursday exercises by Thursday 11:59 pm, Friday exercises by Monday 11:59 pm — run oslings submit again, and it scores 75%.
Missed the session The exercise was released at the start of the session; oslings update fetches it. Pass it by the same deadline for 75%. After the deadline it scores 0.
Resuming old work oslings goto <name> restores your own work from my-work/, exactly as you left it.

There is no supervised make-up. Finishing after class is on your honor, and the same integrity rules apply: your own work, explainable line by line.