Distributed Systems

ECE419, Winter 2026
University of Toronto
Instructor: Ashvin Goel

    Distributed Systems

Lab information

The labs consist of a number of programming assignments. These assignments will be released here. All the assignments are to be done individually.

Please be aware that this course will require significant time for the programming assignments. However, the assignments have been designed so that there is enough time to completely finish each assignment. Each assignment specifies the code that needs to be read and understood. Please read the handouts carefully before starting with the assignments.

You can use the lab sessions to get one-on-one help from TAs. You can also get help on the Piazza website. Please do not post code on Piazza. Doing so will be treated as an academic offense. You can also post private messages on Piazza that are only visible to TAs and the instructors.

Note that all marking will be performed by the TAs after the due date outside lab hours, and hence it is not required to attend the lab sessions.

Lab assignments

The assignments, their release dates, and their due dates are shown in the table below. These assignments are worth 40% of the total course mark. The breakup of the marks is shown in the last column of the table.

Assignments will be released on Monday evenings and due on Sunday nights at 11:59 pm, unless indicated below.

Penalties will be applied for late submission. The late penalty is 20% of the assignment's mark for every 24 hour delay, so you receive no marks after 4 days.

Lab Topic Release Date Due Date Time Alloted Marks
1 Learning Go Jan 12 Jan 25 2 weeks 6
2 Basic KV server Jan 26 Feb 8 2 weeks 4
3A Raft leader election Feb 9 Mar 1 2 weeks 8
3B Raft log Feb 9 Mar 15 2 weeks 10
3C Raft persistence Feb 9 Mar 22 1 week 4
4A Replicated KV server Mar 23 Apr 5 2 weeks 8

Programming environment

All assignments will be done in the Go programming language. Go is a systems language originally introduced by Google. It is especially well suited for building distributed systems. Go is well documented and there are many tutorials on it. You are expected to learn this language mostly on your own.

You should start with the go tour. You can take the tour in a web browser or you can install Go on your local machine and run the tour there.

After this tour, you should go over these resources:

If you prefer a step-by-step introduction to Go, you can read one of these books:

The Go Programming Language and Environment is a short article by the original Go authors. It describes the motivation and the key design features of the language.

Lab machines

Your ECE419 lab assignment code will be marked on the UG lab machines. These machines run the Linux operating system and have names that match ug*.eecg.utoronto.ca, e.g., ug149.eecg.utoronto.ca. The range of machine that are accessible is roughly ug51-ug80 (SF4102), ug132-ug180 (GB243), ug201-ug225 (SF2102) and ug226-249 (GB251E).

We recommend developing and debugging your code on the lab machines. If you have never logged into these machines, your username is your UTORid. If you do not have an account on the lab machines, or if you have any issues with the lab machines, including with forgotten passwords, please contact Felipe Cisternas, the lab administrator, and make sure to include your name, UTORid and course code (ECE419) in your email. After your first login, make sure to change your password using the passwd command.

You may be able to develop and run the lab code on your home machine. If you run into any issues, please get help from other students on Piazza. The teaching team may or may not be able to support you.

Lab software

We have installed Go version 1.25.0 on the lab machines. After logging into a lab machine, run go version to check that the go toolchain is available. If you plan to develop code on your home machine, we recommend installing the same Go version.

You may use your home computer to work on the assignments by remotely accessing the lab machines from home. If you plan to work on the terminal, you can use a secure shell program. You can use SSH on Linux or Putty on Windows to access the lab machines remotely. For example, with Putty, you could setup a new session with a host name utorid@ugXX.eecg.utoronto.ca and port number of 22. If you wish to use a graphical IDE to develop and debug your programs on the lab machines from a remote site, you can use VNC. Please see these VNC instructions for details.

For graphical IDEs, we have installed the Go extension for VSCode version 1.93.1 on the lab machines. You can start this version from the VSCode menu or from the command line by running code-1.93.1. Please let us know if you need any other extensions and we can install them on the system image so you don't waste disk space in your home directory.

We have also installed the GoLand IDE from JetBrains on the lab machines. You can use it from the menu or from the command line by running goland. The configuration instructions are available in /cad1/JetBrains/GoLand/Install-Linux-tar.txt.

If you wish to use the GoLand IDE remotely, please follow the Remote Development instructions. Remote development can be performed using the server-to-client and client-to-server workflows. Please use the server-to-client workflow (the client-to-server workflow appears to create a large cache that may exceed your quota). On your home machine, you will need to install the JetBrains Gateway app. This will require a JetBrains license for your machine. These licenses are available for free for educational use. After that, on a lab machine, you will need to start the remote server with a command that will look like:

/cad1/JetBrains/GoLand/bin/remote-dev-server.sh  run --ssh-link-host ugXX.eecg.toronto.edu  ~/ece419

This command will produce a link such as:

jetbrains-gateway://connect#idePath=...

When this link is opened in the browser on your home machine, the gateway app will be be launched and it will connect to the remote machine.

Lab machine issues

Some students exceed their disk quota and then they are unable to access the lab machines. In this case, a remote ssh connection will still work (from ECF machines, or from a friend's account). After logging into the lab machines, run the command:

du -sk * .??*

to find out exactly where the space is being used. Huge browser caches and/or unemptied Trash are the usual causes. You can also use the command

quota -s

to find out your disk quota on the machines.

For any other issues, please contact the lab administrator.