Secure Systems Programming in Rust (M) COMPSCI5119

  • Academic Session: 2025-26
  • School: School of Computing Science
  • Credits: 10
  • Level: Level 5 (SCQF level 11)
  • Typically Offered: Semester 2
  • Available to Visiting Students: Yes
  • Collaborative Online International Learning: No
  • Curriculum For Life: No

Short Description

This course covers advanced topics in systems programming, making practical use of the Rust programming language to explore innovative techniques for safer and more effective systems programming. It will focus on memory-safe programming in a low-level environment, where security and performance are both critical. Relevant scenarios might include operating systems kernels, device drivers, low-level networking code, programming language interpreters, or other areas where the software-machine interface is exposed.

Timetable

One two-hour lecture and one one-hour laboratory session per week.

Requirements of Entry

Programming and Systems Development (H) COMPSCI4084

Excluded Courses

Advanced Systems Programming (H) COMPSCI4089

Advanced Systems Programming (M) COMPSCI5083

Assessment

Examination (60%), Coursework (40%).

 

Coursework will comprise a combination of quizzes, programming exercises and essay-based reflections on material discussed in the course.

Main Assessment In: April/May

Are reassessment opportunities available for all summative assessments? No

Reassessments are normally available for all courses, except those which contribute to the Honours classification. Where, exceptionally, reassessment on Honours courses is required to satisfy professional/accreditation requirements, only the overall course grade achieved at the first attempt will contribute to the Honours classification. For non-Honours courses, students are offered reassessment in all or any of the components of assessment if the satisfactory (threshold) grade for the overall course is not achieved at the first attempt. This is normally grade D3 for undergraduate students and grade C3 for postgraduate students. Exceptionally it may not be possible to offer reassessment of some coursework items, in which case the mark achieved at the first attempt will be counted towards the final course grade. Any such exceptions for this course are described below.

 

The coursework cannot be redone because the feedback provided to the students after the original coursework would give any students redoing the coursework an unfair advantage. 

Course Aims

Rust is a modern programming language that offers developers the possibility to develop safe and efficient systems. Unlike legacy low-level implementation languages like C and C++, Rust enforces memory safety by statically tracking object lifetimes. The Rust language is multi-paradigm, incorporating concepts from both functional and object-oriented programming.

 

This course aims to explore the features of modern programming languages (in particular Rust) and operating systems implementation techniques that can ease the challenges of systems programming, improving security by means of static analysis and run-time support. The course will introduce the syntax and semantics of the Rust language, along with the developer tooling provided as part of the wider ecosystem. This course will take a practical approach to systems programming and operating system interfaces, discussing the limitations of deployed systems, and considering how systems programming in Rust addresses the challenges of supporting modern computing systems. Particular emphasis will be placed on system correctness and secure programming, to ensure the resulting systems are safe to use in an adversarial environment.

Intended Learning Outcomes of Course

By the end of this course students will be able to:

1. Appraise the advantages and disadvantages of Rust as a modern systems programming language, and to compare and contrast this with a legacy systems programming language, for example C; to discuss the role of the type system, static analysis, and verification tools in systems programming, and show awareness of how to model system properties using the type system to avoid errors;

2. Discuss the challenges of secure low-level programming and write secure code in Rust to perform systems programming tasks such as parsing hostile network input; show awareness of security problems in programs written in unsafe languages like C;

3. Discuss the advantages and disadvantages of implicit memory management, to understand the operation of reference counting and alternative techniques for memory management, and know when it might be appropriate to apply such techniques and managed run-times to real-time systems and/or operating systems;

4. Critique different programming models for concurrent systems, their implementation, and their impact on operating systems;

5. Analyse small-scale Rust applications to demonstrate understanding of their security properties, in particular those arising due to memory safety and the lack of data races in concurrent programming, to understand trade-offs and implementation decisions; and

6. Operate within the context of the Rust developer ecosystem, using appropriate project management tools like cargo and identifying appropriate library crates.

Minimum Requirement for Award of Credits

Students must submit at least 75% by weight of the components (including examinations) of the course's summative assessment.