In the latest version of the compiler, RUF status is shown as follows: Accepted(1,002), Active(562), Incomplete(11), Removed(59), Unknown(241).Â
Complete results can be viewed and downloaded in the Excel table.
Through the lifetime of the Rust compiler, the abnormal RUF lifetime can be seen in the figure 7.
Complete results can be viewed and downloaded in the Excel table. This excel lists all abnormal RUF with their complete lifetime from compiler version 1.0.0 to 1.63.0.
Table 2 shows the summary of RUF usage in the Rust ecosystem.
Complete results can be viewed and downloaded in the Excel tables. The first Excel table shows RUF that used by Rust projects and their status in the newest compiler version. The second table shows how package versions use RUF, the status of RUF, and the conditions of enabling RUF. This illustrates the RUF usage of the Rust ecosystem.
Complete Result 2.1: Used RUF by Rust packages.
Complete Result 2.2: How Rust packages use RUF. "conds" represents when RUF is enabled, and "status" represents the RUF status in the newest compiler.
Table 3 shows the summary of RUF impacts in the Rust ecosystem.
Complete results can be viewed and downloaded in the Excel tables. The RUF impact caused by direct usage can be found in RUF Usage. Here, we list three tables, which are Uncond Impact, Cond Impact, Total Impact.
Uncond Impact: The first Excel shows package versions that transitively depend on other packages that enable RUF by default. These versions are unconditionally impacted by RUF. The table also shows the RUF that impact the package version and their status.
Cond Impact: The second table shows package versions through transitive dependencies, including Uncond Impact. These versions are conditionally impacted by RUF. The table also shows the RUF that impact the package version and their status.
Total Impact: The third table shows package versions impacted by RUF, including Cond Impact and Direct Usage. These versions are impacted by RUF, either directly or through dependencies. The table also shows the RUF that impact the package version and their status.
Complete Result 3.1.1: Uncond RUF Impacts
Complete Result 3.1.2: Cond Impact
Complete Result 3.1.3: Total Impact
We further analyze why RUF can impact such a large number of packages in the Rust ecosystem. For packages that use RUF, we discover some super-spreaders which many packages depend on.
Taking unconditional RUF configuration as an example, we find that redox_syscall-0.1.57 uses unknown RUF llvm_asm and removed RUF const_fn and enables them by default. This causes compilation failures for 41,750 Rust package versions in the ecosystem, accounting for 41,750/46,157 (90%) of all package versions unconditionally impacted by unknown RUF.
Complete results:
This table shows all package versions that unconditionally enable removed RUF, sorted by their transitive dependents count.
Table 5 shows the established RUF impact mitigation results.
Complete results:
This table shows the established mitigation success rate. For each impacted package, we represent the status before and after the mitigation and the recovery point ("63" represents Rust compiler "v1.63.0") of the mitigation.
All tables shown above can be downloaded directly one by one. You can also download them together in the home page of the website.
We use version id to represent each unique Rust package version. This id is unique from crates.io official database and can be used to query the metadata of the package. See here (Step 2) to get the official database dumps.