diff options
Diffstat (limited to 'index.html')
-rw-r--r-- | index.html | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/index.html b/index.html new file mode 100644 index 0000000..72dca25 --- /dev/null +++ b/index.html @@ -0,0 +1,96 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Are We 1.0 Yet?</title> + <style> + /* "derived" (stolen) from evenbettermotherfucking.website */ + html { + margin: 1rem auto; + background: #f2f2f2; + color: #444444; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + font-size: 16px; + line-height: 1.8; + text-shadow: 0 1px 0 #ffffff; + max-width: 60em; + } + body { + margin: 0 1rem; + } + a { + border-bottom: 1px solid #444444; + color: #444444; + text-decoration: none; + } + a:hover { + border-bottom-style: dashed; + } + blockquote { + margin-left: 1em; + border-left: 2px solid #444444; + padding-left: 1em; + } + + .highlight { + background-color: #c2f2c2; + } + </style> +</head> +<body> +<main> + <h1>Are We 1.0 Yet?</h1> + <p> + Checking the 360 most downloaded crates of all time on <a href="https://crates.io">crates.io</a> to see which ones have reached version 1.0 yet. + </p> + <p> + <strong>{{ crates | map(attribute='latest_version') | selectattr('is_1_0') | list | length }} / {{ crates | length }}</strong> crates are 1.0 by now. + </p> + <table> + <thead> + <tr> + <th>Name</th> + <th>Latest Version</th> + </tr> + </thead> + <tbody> + {% for crate in crates %} + <tr class="{% if crate.latest_version.is_1_0 %}highlight{% endif %}"> + <td><a href="https://crates.io/crates/{{ crate.name }}">{{ crate.name }}</a></td> + <td>{{ crate.latest_version }}{% if crate.latest_version != crate.latest_pre_release_version %} + (& <span class="{% if crate.latest_pre_release_version.is_1_0 %}highlight{% endif %}">{{ crate.latest_pre_release_version }})</span>{% endif %}</td> + </tr> + {% endfor %} + </tbody> + </table> +</main> +<aside> + <h2>Why?</h2> + <p> + The Rust ecosystem is still very immature. + Very few critical packages have actually reached version 1.0 yet. + The <a href="https://semver.org/#spec-item-4">semver spec</a> says "Major version zero (0.y.z) is for initial development... The public API SHOULD NOT be considered stable." + Additionally, the <a href="https://semver.org/#how-do-i-know-when-to-release-100">FAQ entry</a> for "How do I know when to release 1.0.0?" gives some heuristics that the Rust ecosystem doesn't really abide by at all: + </p> + <blockquote> + <p> + If your software is being used in production, it should probably already be 1.0.0. + If you have a stable API on which users have come to depend, you should be 1.0.0. + If you’re worrying a lot about backwards compatibility, you should probably already be 1.0.0. + </p> + </blockquote> + <p> + I submit that it would be difficult to build a non-trivial Rust program intended for production without depending on any crates which are not yet at version 1.0.0 or higher. + This situation is not really ideal. + I'm not saying the maintainers of these crates are lazy, or owe the community a stable 1.0.0 release, or anything like that. + I'm just saying ecosystem stability is a good thing to care about, and right now Rust in general doesn't have that. + </p> +</aside> +<footer> + Built by <a href="https://www.boringcactus.com/">boringcactus</a>. + Inspired by <a href="https://pythonwheels.com/">Python Wheels</a>. + Generator code <a href="https://git.sr.ht/~boringcactus/arewe1.0yet">available</a>. + Data pulled at {{ metadata.timestamp }}. +</footer> +</body> +</html>
\ No newline at end of file |