From dadd08748fae699b554aad2772cbe5dbe367dc58 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 Jan 2025 21:54:11 +0000 Subject: [PATCH 1/5] adjust RFL description to focus on RFC #3716 move list of flags to a FAQ --- src/2025h1/rfl.md | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/2025h1/rfl.md b/src/2025h1/rfl.md index cdb8c12..75d1f6d 100644 --- a/src/2025h1/rfl.md +++ b/src/2025h1/rfl.md @@ -10,7 +10,7 @@ ## Summary -Continue working towards Rust for Linux on stable, turning focus from language features to compiler and tooling. +Continue working towards Rust for Linux on stable, turning focus to compiler and tooling. ## Motivation @@ -65,12 +65,7 @@ We also began work on tooling stabilization with an [RFC proposing an approach t Over the next six months our goal is to stabilize the major bits of tooling used by the Rust for Linux project. Some of these work items are complex enough to be tracked independently as their own project goals, in which case they are linked. -* implementing RFC #3716 to stabilize ABI-modifying compiler flags to control code generation, sanitizer integration, and so forth: - * arm64: `-Zbranch-protection`, `-Zfixed-x18`, `-Zuse-sync-unwind`. - * x86: `-Zcf-protection`, `-Zfunction-return`, `-Zno-jump-tables`, `-Zpatchable-function-entry`, retpoline (`+retpoline-external-thunk,+retpoline-indirect-branches,+retpoline-indirect-calls`), SLS (`+harden-sls-ijmp,+harden-sls-ret`). - * x86 32-bit: `-Zregparm=3`, `-Zreg-struct-return`. - * LoongArch: `-Zdirect-access-external-data`. - * production sanitizer flags: `-Zsanitizer=shadow-call-stack`, `-Zsanitizer=kcfi`, `-Zsanitizer-cfi-normalize-integer`. +* implementing RFC #3716 to allow stabilizing ABI-modifying compiler flags to control code generation, sanitizer integration, and so forth * the ability to extract dependency info and to configure no-std without requiring it in the source file: * currently using `-Zbinary_dep_depinfo=y` and `-Zcrate-attr` * stable rustdoc features allowing the RFL project to extract and customize rustdoc tests (`--extract-doctests`); @@ -152,3 +147,17 @@ As discussed on [Zulip](https://rust-lang.zulipchat.com/#narrow/channel/257328-c ### Blessed way to rebuild std See [build-std](./build-std.md) goal. + +## Frequently asked questions + +### What kind of compiler flags will Rust-for-Linux need? + +Implementing RFC #3716, coupled with a [blessed way to build std](./build-std.md), will allow the full use of flags that modify the ABI. We will need to ultimately stabilize the full set of flags used by RFL, which include at least the following: + +* arm64: `-Zbranch-protection`, `-Zfixed-x18`, `-Zuse-sync-unwind`. +* x86: `-Zcf-protection`, `-Zfunction-return`, `-Zno-jump-tables`, `-Zpatchable-function-entry`, retpoline (`+retpoline-external-thunk,+retpoline-indirect-branches,+retpoline-indirect-calls`), SLS (`+harden-sls-ijmp,+harden-sls-ret`). +* x86 32-bit: `-Zregparm=3`, `-Zreg-struct-return`. +* LoongArch: `-Zdirect-access-external-data`. +* production sanitizer flags: `-Zsanitizer=shadow-call-stack`, `-Zsanitizer=kcfi`, `-Zsanitizer-cfi-normalize-integer`. + +Stabilization decisions for each flag will be made independently. We will likely take a future goal to drive some percentage of them to stabilization once RFC #3716 is implemented. \ No newline at end of file From fc2f70b30359761d2acd4ffc3eedf7db43883caf Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 Jan 2025 22:04:36 +0000 Subject: [PATCH 2/5] talk about the flagship goal selection process --- src/2024h2/flagship.md | 2 ++ src/2025h1/goals.md | 2 +- src/SUMMARY.md | 1 + src/about/flagship_goals.md | 9 +++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 src/about/flagship_goals.md diff --git a/src/2024h2/flagship.md b/src/2024h2/flagship.md index 5ac141b..e6229fb 100644 --- a/src/2024h2/flagship.md +++ b/src/2024h2/flagship.md @@ -1,3 +1,5 @@ # Flagship goals +[Learn about flagship goals.](../about/flagship_goals.md) + diff --git a/src/2025h1/goals.md b/src/2025h1/goals.md index 576f2f9..3b99a26 100644 --- a/src/2025h1/goals.md +++ b/src/2025h1/goals.md @@ -8,7 +8,7 @@ This page lists the project goals **proposed** for 2025h1. ## Flagship goals -Flagship goals represent the goals expected to have the broadest overall impact. +Flagship goals represent the goals expected to have the broadest overall impact. [Learn about flagship goals.](../about/flagship_goals.md) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index f498242..c19c64d 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -18,6 +18,7 @@ # 📖 Learn about - [Goal motivations](./about/motivation.md) +- [Flagship goals](./about/flagship_goals.md) - [Invited goals](./about/invited_goals.md) - [Point of contact](./about/poc.md) - [Task owners](./about/owners.md) diff --git a/src/about/flagship_goals.md b/src/about/flagship_goals.md new file mode 100644 index 0000000..3d043f8 --- /dev/null +++ b/src/about/flagship_goals.md @@ -0,0 +1,9 @@ +# Flagship goals + +Each time period, the goal program owner selects a small set of the proposed goals (typically 2-3) as **flagship goals**. These goals are highlighted specially. + +The criteria for a goal to be considered as a flagship goal: + +* **Tell a story:** Flagship goals further some aspect of Rust's story that we want to be better understood. +* **Broad impact and interest:** Flagship goals should be impactful and/or interesting to a broad swath of Rust's user base. +* **Take time:** While not required, it is common that flagship goals take multiple goal sessions to complete. Therefore, the flagship goals often continue from goal period to goal period. \ No newline at end of file From a4eb1574ba0aefdf8c4d26099846e7ca6da27992 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 7 Jan 2025 15:01:11 +0000 Subject: [PATCH 3/5] author text for flagship goals --- src/2025h1/README.md | 23 +++++++++++++++++++++-- src/2025h1/all-hands.md | 3 ++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/2025h1/README.md b/src/2025h1/README.md index 2f6496b..fce8680 100644 --- a/src/2025h1/README.md +++ b/src/2025h1/README.md @@ -41,11 +41,30 @@ We believe that... The flagship goals proposed for this roadmap are as follows: -(TBD) +* Continue making Rust easier to use for network systems by [**bringing the Async Rust experience closer to parity with sync Rust**](./async.md). In 2025H1 we plan to: + * tell a complete story for the use of async fn in traits, unblocking wide ecosystem adoption; + * improve the ergonomics of `Pin`, which is frequently used in low-level async code; and + * prepare to support asynchronous (and synchronous) generators in the language. +* Continue helping Rust support low-level projects by [**stabilizing compiler options and tooling used by the Rust-for-Linux (RFL) project**](./rfl.md). In 2025H1 we plan to: + * implement RFC #3716 to allow stabilizing ABI-modifying compiler flags to control code generation, sanitizer integration, and so forth; + * taking the first step towards stabilizing [`build-std`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std) by [creating a stable way to rebuild core with specific compiler options](./build-std.md); + * add rustdoc features to extract and customize rustdoc tests (`--extract-doctests`); + * stabilize clippy configuration like `.clippy.toml` and `CLIPPY_CONF_DIR`; + * stabilize compiler flags to extract dependency info (e.g., as via `-Zbinary_dep_depinfo=y`) and to configure no-std without requiring it in the source file (e.g., as via `-Zcrate-attr`); +* Address the biggest concerns raised by Rust maintainers, lack of face-to-face interaction, by [**organizing the Rust All-Hands 2025**](./all-hands.md). In 2025H1 we plan to: + * convene Rust maintainers to celebrate Rust's tenth birthday at [RustWeek 2025](https://2025.rustweek.org) (co-organized with [RustNL](https://2025.rustweek.org/about/); + * author a first draft for a [Rust vision doc](./rust-vision-doc.md) and gather feedback. #### Why these particular flagship goals? -(TBD--typically one paragraph per goal) +[**Async.**](./async.md) Rust is a great fit for server development thanks to its ability to scale to very high load while retaining low memory usage and tight tail latency. 52% of the respondents in the [2023 Rust survey](https://blog.rust-lang.org/2024/02/19/2023-Rust-Annual-Survey-2023-results.html) indicated that they use Rust to build server-side or backend applications. In [2025H1 our plan](./async.md) is to deliver (a) improved support for async-fn-in-traits, completely subsuming the functionality of the [`async-trait` crate](https://crates.io/crates/async-trait); (b) finalize a design for sync and async generators, simplifying the creation of iterators and async data streams; (c) and improve the ergonomics of `Pin`, making lower-level async coding more approachable. These items together start to unblock the creation of the next generation of async libraries in the wider ecosystem, as progress there has been blocked on a stable solution for async traits and streams. + +[**Rust for Linux.**](./rfl.md) The [experimental support for Rust development in the Linux kernel][RFL.com] is a watershed moment for Rust, demonstrating to the world that Rust is indeed a true alternative to C. Currently the Linux kernel support depends on a wide variety of unstable features in Rust; these same features block other embedded and low-level systems applications. We are working to stabilize all of these features so that RFL can be built on a stable toolchain. As we have successfully stabilized the majority of the language features used by RFL, we plan in 2025H1 to turn our focus to compiler flags and tooling options. We will (a) implement RFC #3716 which lays out a design for ABI-modifying flags; (b) take the first step towards stabilizing [`build-std`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std) by [creating a stable way to rebuild core with specific compiler options](./build-std.md); (c) extending rustdoc, clippy, and the compiler with features that extract metadata for integration into other build systems (in this case, the kernel's build system). + +[**Rust All Hands 2025.**](./all-hands.md) May 15, 2025 marks the 10-year anniversary of Rust's 1.0 release; it also marks 10 years since the [creation of the Rust subteams](https://internals.rust-lang.org/t/announcing-the-subteams/2042). At the time [there were 6 Rust teams with 24 people in total](http://web.archive.org/web/20150517235608/http://www.rust-lang.org/team.html). There are now 57 teams with 166 people. In-person All Hands meetings are an effective way to help these maintainers get to know one another with high-bandwidth discussions. This year, the Rust project will be coming together for [RustWeek 2025](https://2025.rustweek.org), a joint event organized with [RustNL](https://2025.rustweek.org/about/). Participating project teams will use the time to share knowledge, make plans, or just get to know one another better. One particular goal for the All Hands is reviewing a draft of the [Rust Vision Doc](./rust-vision-doc.md), a document that aims to take stock of where Rust is and lay out high-level goals for the next few years. + +[RFL.com]: https://rust-for-linux.com/ +[RFL#2]: https://github.com/Rust-for-Linux/linux/issues/2 ### Project goals diff --git a/src/2025h1/all-hands.md b/src/2025h1/all-hands.md index 236fe5e..90483db 100644 --- a/src/2025h1/all-hands.md +++ b/src/2025h1/all-hands.md @@ -1,4 +1,4 @@ -# Rust All-Hands 2025! +# Organize Rust All-Hands 2025 | Metadata | | |------------------|----------------------| @@ -30,6 +30,7 @@ See https://blog.rust-lang.org/inside-rust/2024/09/02/all-hands.html - Prepare the all-hands and everything around it. - Have a social and informal "pre-all hands day" on Rust's 10th birtday: May 15, 2025. - Have a two-day all-hands on May 16 and May 17, 2025. +- During the all hands, coordinate reviews of the proposed [Rust Vision Doc](./rust-vision-doc.md) ### The "shiny future" we are working towards From 07618afb6ce19a7133fdd0502f7f8d2fbcd8b2df Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 7 Jan 2025 10:23:37 -0500 Subject: [PATCH 4/5] Update src/2025h1/README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rémy Rakic --- src/2025h1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/2025h1/README.md b/src/2025h1/README.md index fce8680..bbdde9b 100644 --- a/src/2025h1/README.md +++ b/src/2025h1/README.md @@ -50,7 +50,7 @@ The flagship goals proposed for this roadmap are as follows: * taking the first step towards stabilizing [`build-std`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std) by [creating a stable way to rebuild core with specific compiler options](./build-std.md); * add rustdoc features to extract and customize rustdoc tests (`--extract-doctests`); * stabilize clippy configuration like `.clippy.toml` and `CLIPPY_CONF_DIR`; - * stabilize compiler flags to extract dependency info (e.g., as via `-Zbinary_dep_depinfo=y`) and to configure no-std without requiring it in the source file (e.g., as via `-Zcrate-attr`); + * stabilize compiler flags to extract dependency info (e.g., as via `-Zbinary-dep-depinfo=y`) and to configure no-std without requiring it in the source file (e.g., as via `-Zcrate-attr`); * Address the biggest concerns raised by Rust maintainers, lack of face-to-face interaction, by [**organizing the Rust All-Hands 2025**](./all-hands.md). In 2025H1 we plan to: * convene Rust maintainers to celebrate Rust's tenth birthday at [RustWeek 2025](https://2025.rustweek.org) (co-organized with [RustNL](https://2025.rustweek.org/about/); * author a first draft for a [Rust vision doc](./rust-vision-doc.md) and gather feedback. From d4c56f3754391ad4dc80b79b667a2fbcce13fe0e Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Tue, 7 Jan 2025 10:24:54 -0500 Subject: [PATCH 5/5] Update src/2025h1/README.md Co-authored-by: Alex Gaynor --- src/2025h1/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/2025h1/README.md b/src/2025h1/README.md index bbdde9b..3906c9e 100644 --- a/src/2025h1/README.md +++ b/src/2025h1/README.md @@ -59,7 +59,7 @@ The flagship goals proposed for this roadmap are as follows: [**Async.**](./async.md) Rust is a great fit for server development thanks to its ability to scale to very high load while retaining low memory usage and tight tail latency. 52% of the respondents in the [2023 Rust survey](https://blog.rust-lang.org/2024/02/19/2023-Rust-Annual-Survey-2023-results.html) indicated that they use Rust to build server-side or backend applications. In [2025H1 our plan](./async.md) is to deliver (a) improved support for async-fn-in-traits, completely subsuming the functionality of the [`async-trait` crate](https://crates.io/crates/async-trait); (b) finalize a design for sync and async generators, simplifying the creation of iterators and async data streams; (c) and improve the ergonomics of `Pin`, making lower-level async coding more approachable. These items together start to unblock the creation of the next generation of async libraries in the wider ecosystem, as progress there has been blocked on a stable solution for async traits and streams. -[**Rust for Linux.**](./rfl.md) The [experimental support for Rust development in the Linux kernel][RFL.com] is a watershed moment for Rust, demonstrating to the world that Rust is indeed a true alternative to C. Currently the Linux kernel support depends on a wide variety of unstable features in Rust; these same features block other embedded and low-level systems applications. We are working to stabilize all of these features so that RFL can be built on a stable toolchain. As we have successfully stabilized the majority of the language features used by RFL, we plan in 2025H1 to turn our focus to compiler flags and tooling options. We will (a) implement RFC #3716 which lays out a design for ABI-modifying flags; (b) take the first step towards stabilizing [`build-std`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std) by [creating a stable way to rebuild core with specific compiler options](./build-std.md); (c) extending rustdoc, clippy, and the compiler with features that extract metadata for integration into other build systems (in this case, the kernel's build system). +[**Rust for Linux.**](./rfl.md) The [experimental support for Rust development in the Linux kernel][https://rust-for-linux.com/] is a watershed moment for Rust, demonstrating to the world that Rust is indeed a true alternative to C. Currently the Linux kernel support depends on a wide variety of unstable features in Rust; these same features block other embedded and low-level systems applications. We are working to stabilize all of these features so that RFL can be built on a stable toolchain. As we have successfully stabilized the majority of the language features used by RFL, we plan in 2025H1 to turn our focus to compiler flags and tooling options. We will (a) implement RFC #3716 which lays out a design for ABI-modifying flags; (b) take the first step towards stabilizing [`build-std`](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std) by [creating a stable way to rebuild core with specific compiler options](./build-std.md); (c) extending rustdoc, clippy, and the compiler with features that extract metadata for integration into other build systems (in this case, the kernel's build system). [**Rust All Hands 2025.**](./all-hands.md) May 15, 2025 marks the 10-year anniversary of Rust's 1.0 release; it also marks 10 years since the [creation of the Rust subteams](https://internals.rust-lang.org/t/announcing-the-subteams/2042). At the time [there were 6 Rust teams with 24 people in total](http://web.archive.org/web/20150517235608/http://www.rust-lang.org/team.html). There are now 57 teams with 166 people. In-person All Hands meetings are an effective way to help these maintainers get to know one another with high-bandwidth discussions. This year, the Rust project will be coming together for [RustWeek 2025](https://2025.rustweek.org), a joint event organized with [RustNL](https://2025.rustweek.org/about/). Participating project teams will use the time to share knowledge, make plans, or just get to know one another better. One particular goal for the All Hands is reviewing a draft of the [Rust Vision Doc](./rust-vision-doc.md), a document that aims to take stock of where Rust is and lay out high-level goals for the next few years.