EN:The Journey of Rust and Procps
Hi, I'm Krysztal Huang, a contributor to Debian's
uutils/procps
.
I'm thrilled to have had the opportunity to participate in GSoC 2024, contributing to the uutils project and gaining a wealth of knowledge and skills along the way. :)
The Debian and uutils communities are incredibly welcoming, which has been fantastic. I've been using Debian as my primary operating system for about eight years now, drawn to its stability. I frequently rely on Debian for my personal services and various projects.
The procps project
The most widely used implementation of procps
is the one
under GPLv3, the procps-ng project. It
provides a set of tools for system information statistics that have been
used for many years and have served well. However, it is written in
C and licensed under GPLv3.
This project has been in use for over thirty years, and its code is not as open as it could be because of its license. Moreover, it will likely remain in our operating systems for the foreseeable future.
But procps
and C are getting old.
Younger developers tend to prefer newer programming languages like Rust.
As a result, procps
may rely on the previous generation for
maintenance, while the younger generation may have less interest in it
due to their unfamiliarity with C. Consequently, those wanting
to contribute may struggle to effectively fix issues.
The CVEs and Rust
Rust offers excellent memory safety and performance. Many CVEs
associated with the original procps
are related to memory
safety issues (e.g., buffer overflows):
...and others.
However, with Rust, these issues are caught at compile time, thanks to its ownership system.
So...?
I'm working on rewriting procps
under the uutils organization. The new
implementation, simply called procps, has taught me a lot:
from understanding the /proc
pseudo-filesystem to the
differences between *NIX (and *NIX-like) systems.
The initial implementation of uutils procps
was focused
on the Linux platform. However, to support the broader *NIX platform,
including macOS and FreeBSD, it's important to address the subtle
differences in implementation across these operating systems. As of now,
the uutils procps
does not support macOS
and FreeBSD.
Relevant issues:
The ultimate goal for uutils procps
is to support both
*NIX and Windows platforms. However, the threading models for Windows
and *NIX platforms differ significantly, necessitating the abstraction
of these models into a more general one.
Most importantly, uutils' procps
implementation is
licensed using the MIT license, which is a very loose open source
license. Meaning that uutils' procps has virtually no restrictions from
source distribution to use.
What did I do?
I've implemented the basic parts of some commands and they now run the most basic functions.
Relevant prs:
Thanks to my mentors and, without your help, I probably wouldn't have fit into the community and development as well as I have :)