Verus: Verifying Rust Programs using Linear Ghost Types
dc.contributor.author
Lattuada, Andrea
dc.contributor.author
Hance, Travis
dc.contributor.author
Cho, Chanhee
dc.contributor.author
Brun, Matthias
dc.contributor.author
Subasinghe, Isitha
dc.contributor.author
Zhou, Yi
dc.contributor.author
Howell, Jon
dc.contributor.author
Parno, Bryan
dc.contributor.author
Hawblitzel, Chris
dc.date.accessioned
2023-05-04T08:06:03Z
dc.date.available
2023-05-04T03:40:49Z
dc.date.available
2023-05-04T08:06:03Z
dc.date.issued
2023-04
dc.identifier.issn
2475-1421
dc.identifier.other
10.1145/3586037
en_US
dc.identifier.uri
http://hdl.handle.net/20.500.11850/610518
dc.identifier.doi
10.3929/ethz-b-000610518
dc.description.abstract
The Rust programming language provides a powerful type system that checks linearity and borrowing, allowing code to safely manipulate memory without garbage collection and making Rust ideal for developing low-level, high-assurance systems. For such systems, formal verification can be useful to prove functional correctness properties beyond type safety. This paper presents Verus, an SMT-based tool for formally verifying Rust programs. With Verus, programmers express proofs and specifications using the Rust language, allowing proofs to take advantage of Rust's linear types and borrow checking. We show how this allows proofs to manipulate linearly typed permissions that let Rust code safely manipulate memory, pointers, and concurrent resources. Verus organizes proofs and specifications using a novel mode system that distinguishes specifications, which are not checked for linearity and borrowing, from executable code and proofs, which are checked for linearity and borrowing. We formalize Verus' linearity, borrowing, and modes in a small lambda calculus, for which we prove type safety and termination of specifications and proofs. We demonstrate Verus on a series of examples, including pointer-manipulating code (an xor-based doubly linked list), code with interior mutability, and concurrent code.
en_US
dc.format
application/pdf
en_US
dc.language.iso
en
en_US
dc.publisher
Association for Computing Machinery
en_US
dc.rights.uri
http://creativecommons.org/licenses/by/4.0/
dc.subject
Rust
en_US
dc.subject
linear types
en_US
dc.subject
systems verification
en_US
dc.title
Verus: Verifying Rust Programs using Linear Ghost Types
en_US
dc.type
Journal Article
dc.rights.license
Creative Commons Attribution 4.0 International
dc.date.published
2023-04-06
ethz.journal.title
Proceedings of the ACM on Programming Languages
ethz.journal.volume
7
en_US
ethz.journal.issue
OOPSLA1
en_US
ethz.journal.abbreviated
Proc. ACM Program. Lang.
ethz.pages.start
85
en_US
ethz.size
30 p.
en_US
ethz.version.deposit
publishedVersion
en_US
ethz.identifier.wos
ethz.identifier.scopus
ethz.publication.place
New York, NY
en_US
ethz.publication.status
published
en_US
ethz.date.deposited
2023-05-04T03:40:49Z
ethz.source
SCOPUS
ethz.eth
yes
en_US
ethz.availability
Open access
en_US
ethz.rosetta.installDate
2024-02-02T22:34:38Z
ethz.rosetta.lastUpdated
2024-02-02T22:34:38Z
ethz.rosetta.versionExported
true
ethz.COinS
ctx_ver=Z39.88-2004&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft.atitle=Verus:%20Verifying%20Rust%20Programs%20using%20Linear%20Ghost%20Types&rft.jtitle=Proceedings%20of%20the%20ACM%20on%20Programming%20Languages&rft.date=2023-04&rft.volume=7&rft.issue=OOPSLA1&rft.spage=85&rft.issn=2475-1421&rft.au=Lattuada,%20Andrea&Hance,%20Travis&Cho,%20Chanhee&Brun,%20Matthias&Subasinghe,%20Isitha&rft.genre=article&rft_id=info:doi/10.1145/3586037&
Files in this item
Publication type
-
Journal Article [131753]