arewegameyet
arewegameyet copied to clipboard
How do we remove crates?
There's clutter-y chaff in some lists... corange-rs
is 3rd in engines even though it hasn't been touched in 3 years.
There has to be objective criteria for removing things or else it can get contentious. One person says "We should remove A" and then the owner of A says "wait, why?" and there's an argument. An off-the-top-of-my-head idea for how that might work is, a crate gets removed if:
- A crate is unmaintained and has no commits for X time (6 months? A year?)
- And it isn't obviously useful in its current state (a crate such as an audio codec may not get many commits because it's basically done)
- And someone submits a PR for the removal
What objective criteria can determine usefulness?
Hmm.. maybe no such criteria are needed if the removal PR is required to contain a succint rationale...
I dunno! Any suggestions? :D
No good suggestions from my side :)
A few objective criteria that do not quite measure usefulness come to mind:
- number of recent downloads on crates.io
- compiles on current Rust
- declared abandoned by author/maintainer
We could grey abandoned crates out, or put them in a separate category. There may still be useful code in them, for reference, so I wouldn't like to just chuck them out.
I suggest having the lowest threshold being editions since those are a thing now: about once/edition, if it wasn't touched in ~an edition and doesn't represent a "finished work" that is thus "continuously useful"? It gets booted (or downgraded to a historical archive) without comment required. Essentially, someone who was introduced in 2019 to Rust (hi!) will be very confused by the code in a library that was written at the beginning of 2015, when Rust 1.0 was still alpha, so even reading those is less useful.
And from where I am standing, I still kind of blink at the idea of trying to use anything written before 2018. It's still legible, but I am cozier with the newer idioms.
That's... actually not a terrible idea IMO.
Leaving comment here instead of opening a new issue about this.. It looks like there are also some crates that have been yanked/discontinued from Crates.io... nCollide in particular (which has been replaced with nCollide2D and nCollide3D) is the one that comes to mind. So might I propose adding another criteria for removing crates from the website's list?
- If a crate has been removed from Crates.io
One more case for the historical archive, i guess? https://amethyst.rs/posts/amethyst--starting-fresh
I propose at least having a the following rules
- if the the current maintainers of a crate clearly deprecate it (e.g. Amethyst, nCollide) => remove it or replace it with the new version
- if it looks unmaintained, fulfilling all of the criteria (subject to debate)
- no updates for a year
- author and maintainers don't seem to respond
- not a finished crate (e.g. an audio codec can be a finished crate)
If a crate seems useful, but isn't being maintained, then it might be worthwhile to
- either remove it, since recommending an unmaintained crate doesn't seem ideal
- or point it out that it's unmaintained, and thus encourage people to step up and hopefully get the crate back into shape :)
I also think that the consequences of removing a crate too soon are not that severe, because re-adding it isn't hard at all. Instead it's way more useful to keep these lists a relatively current snapshot of the state of the ecosystem.
This issue has been open for 4+ years now. what even is this blocked on?
I thought arewegameyet.rs itself was abandoned because it showed so many old entries like amethyst or conrod etc.. which are explicitly abandoned by the authors themselves.
The older projects just increase noise and diminish the utility of the website imo.
This is not an "official" list, so we don't need rigid rules for deprecation either.
- Did the project have any updates in the past six months? No? then deprecate.
- If the project is done. Then, keep it.
- If the project is explicitly abandoned by the authors with an announcement? deprecate.
If the rules don't work, they can be evolved later. But listing the abandoned projects mixed with the latest maintained projects is just not the way.
I definitely think dealing with this is long overdue - at the very least it'd be worth us ditching any libraries that are obviously dead (ancient archived repos, etc), but I do think the rules you suggested sound reasonable.
I also think we're going to have our hand forced by API rate limits sooner or later, as the more libraries we have on the site, the more calls we're making into Crates.io/GitHub every time we publish (see #378).
I think the main blockers to moving forward are:
- We need to decide whether we de-emphasise the old items or just remove them (my vote would be for the latter, as I'm not convinced that many people would look at the archives, but I could be wrong!).
- Someone needs to actually do the work of figuring out which crates are in scope for removal.
- Ideally, we should figure out a process for pruning stuff in the future so that we don't end up back here in another four years...
You may notice that the common factor in all of these is actually having time to do the thing - everyone in the gamedev working group has been pretty busy lately, so I think nobody's really had the bandwidth to make this a priority.
I am not in the gamedev group, but i can atleast go though all the projects and make a list of all the projects that are either explicitly abandoned (with a link to the announcement) or inactive for more than one year.
Is that acceptable?
If you want, that'd be a big help, I think :) Once we've got a shortlist, I think it'll be easier to figure out whether the rules need any tweaks.
Name | Reason | Last Activity Date | Repo link |
---|---|---|---|
alto | archived | July 2020 | https://github.com/jpernst/alto |
ambisonic | no activity | Feb 2021 | https://github.com/mbillingr/ambisonic |
amethyst | archived | April 2022 | https://github.com/amethyst/amethyst/ |
amethyst_network | archived | April 2022 | https://github.com/amethyst/amethyst/ |
arcana | no activity | July 2022 | https://github.com/arcana-engine/arcana |
audir | no activity | Dec 2020 | https://github.com/norse-rs/audir |
beehive | no activity | May 2020 | repo deleted :( |
bmfont | no activity | Jan 2021 | https://github.com/KalitaAlexey/bmfont-rust |
building-blocks | no activity | Feb 2022 | https://github.com/bonsairobo/building-blocks |
calx-ecs | no activity | July 2018 | https://github.com/rsaarelm/calx-ecs |
caper | no activity | Jan 2022 | https://github.com/shockham/caper |
cgmath | no activity | April 2022 | https://github.com/rustgd/cgmath |
chariot | no activity | April 2018 | https://github.com/ChariotEngine/Chariot |
coffee | no activity | May 2020 | https://github.com/hecrj/coffee |
conrod | abandoned | Jan 2022 | https://github.com/pistondevelopers/conrod |
const-tweaker | no activity | Aug 2021 | https://github.com/tversteeg/const-tweaker |
corange-rs | no activity | 2015 | https://github.com/lucidscape/corange-rs |
crayon | no activity | May 2019 | https://github.com/shawnscode/crayon |
crow | no activity | Oct 2021 | https://github.com/lcnr/crow |
crystalorb | no activity | Jan 2022 | https://github.com/ErnWong/crystalorb |
dces | no activity | May 2022 | https://gitlab.redox-os.org/redox-os/dces-rust |
distill | no activity | Nov 2021 | https://github.com/amethyst/distill |
MuOxi | no activity | Sep 2021 | https://github.com/duysqubix/MuOxi |
ears | no activity | April 2020 | https://github.com/nickbrowne/ears |
enet | no activity | March 2022 | https://github.com/futile/enet-rs |
euler | no activity | June 2018 | https://github.com/alteous/euler |
ezing | no activity | Nov 2018 | https://github.com/michaelfairley/ezing |
fmod | no activity | July 2021 | https://github.com/GuillaumeGomez/rust-fmod |
froggy | no activity | Sep 2020 | https://github.com/kvark/froggy |
fungui | no activity | Jan 2019 | https://github.com/thinklibs/fungui |
gfx-hal | maintenance mode | Aug 2021 | https://github.com/gfx-rs/gfx |
glsp | on hold | Mar 2020 | https://github.com/fleabitdev/glsp/ |
gme | no activity | Mar 2021 | https://github.com/JayPavlina/Game-Music-Emu-Rust |
graco | no activity | Feb 2020 | https://gitlab.com/chrisrabotin/graco |
hlua | no activity | Oct 2018 | https://github.com/tomaka/hlua |
vulkust | abandoned | Aug 2022 | https://github.com/Hossein-Noroozpour/vulkust |
rust-3d | no activity | Aug 2020 | https://github.com/I3ck/rust-3d |
imgui-ext | no activity | Nov 2020 | https://github.com/germangb/imgui-ext |
imgui-inspect | no activity | April 2021 | https://github.com/aclysma/imgui-inspect |
immi | no activity | July 2018 | https://github.com/tomaka/immi |
netcode | no activity | June 2020 | https://github.com/jaynus/netcode.io |
keeshond | no activity | May 2022 | https://gitlab.com/cosmicchipsocket/keeshond |
keeshond_datapack | no activity | May 2022 | https://gitlab.com/cosmicchipsocket/keeshond |
ketos | no activity | Jan 2020 | https://github.com/murarth/ketos |
laminar | no activity | April 2022 | https://github.com/TimonPost/laminar |
legion | no activity | Oct 2021 | https://github.com/amethyst/legion |
libovr | no activity | 2016 | https://github.com/lucidscape/libovr-rs |
lichen | no activity | April 2022 | https://github.com/viperscape/lichen |
liquidfun | no activity | 2015 | https://github.com/rjanicek/liquidfun-rust |
luajit | no activity | Feb 2019 | https://gitlab.com/Dreae/luajit-rs |
mold2d | no activity | Dec 2018 | https://github.com/DarinM223/mold2d |
molt | no activity | May 2020 | https://github.com/wduquette/molt |
navmesh | no activity | Dec 2021 | https://github.com/PsichiX/navmesh |
ncollide2d | passively maintained | Mar 2022 | https://github.com/dimforge/ncollide |
ncollide3d | passively maintained | Mar 2022 | https://github.com/dimforge/ncollide |
netstack | no activity | April 2020 | https://github.com/Vengarioth/netstack |
nphysics2d | passively maintained | July 2021 | https://github.com/dimforge/nphysics |
nphysics3d | passively maintained | July 2021 | https://github.com/dimforge/nphysics |
nuklear-rust | no activity | Oct 2020 | https://github.com/snuk182/nuklear-rust |
obj | no activity | Jun 2021 | https://github.com/kvark/obj |
ogmo3 | no activity | Aug 2021 | https://github.com/17cupsofcoffee/ogmo3 |
optimath | no activity | Jun 2021 | https://github.com/djugei/optimath/ |
oxygen_quark | no activity | Jan 2019 | repo deleted |
peacock | no activity | April 2021 | https://github.com/maxdeviant/peacock |
physme | archived | Dec 2021 | https://github.com/soycan-sim/physme |
portmidi | no activity | May 2022 | https://github.com/musitdev/portmidi-rs |
pyro | archived | Aug 2022 | https://github.com/MaikKlein/pyro |
pyxel | no activity | Jul 2019 | https://github.com/adtennant/pyxel |
quicksilver | no activity | Oct 2020 | https://github.com/ryanisaacg/quicksilver |
raui | no activity | Nov 2021 | https://github.com/RAUI-labs/raui |
rendy | no activity | Jan 2021 | https://github.com/amethyst/rendy |
rhusics | no activity | Aug 2020 | https://github.com/rustgd/rhusics |
rovr | no activity | 2015 | https://github.com/binsoftware/rovr |
vitral | no activity | Aug 2018 | https://github.com/rsaarelm/vitral |
rsoundio | abandoned | Dec 2020 | https://github.com/klingtnet/rsoundio |
rust-webvr | abandoned | May 2020 | https://github.com/servo/rust-webvr |
sharecart1000 | no activity | Mar 2021 | https://github.com/Lokathor/sharecart1000-rs |
steering | no activity | Sep 2018 | https://github.com/orhanbalci/rust-steering-behaviors |
tachyon-networking | no activity | Feb 2022 | https://github.com/gamemachine/tachyon-networking |
tcod | no activity | Jan 2021 | https://github.com/tomassedovic/tcod-rs |
tessellation | no activity | Jun 2021 | https://github.com/hmeyer/tessellation |
three | abandoned | Sept 2022 | https://github.com/three-rs/three |
throne | no activity | Oct 2021 | https://github.com/t-mw/throne |
torchbear (renamed jazz) | no activity | April 2022 | https://github.com/jazzdotdev/jazz |
vorbis | no activity | 2016 | https://github.com/tomaka/vorbis-rs |
weasel | no activity | Nov 2020 | https://github.com/Trisfald/weasel |
wrapped2d | no activity | May 2020 | https://github.com/Bastacyclop/rust_box2d |
wrapping_coords2d | no activity | May 2022 | https://github.com/facorread/wrapping_coords2d |
natura | no activity | Feb 2022 | https://github.com/ziyasal/natura |
That too way longer than expected. Anyway, i left some repos alone if i felt like they were sort-of complete or still popularly used. eg: gl wrappers or codec decoders.
These are in alphabetical order, so cleaning up in a PR should be pretty straight forward. When i mean no activity, i generally mean that there was no commit or issue comment etc.. by the author since last july (roughly one year). If the repo is missing, then i used the crates.io last version published date instead.
If any of these sleeping projects wake up, then we can re-add them :)
That list looks fairly reasonable to me - there's only a few I've spotted that could be contentious:
-
amethyst
- could be worth keeping purely for how historically relevant it is to the ecosystem? -
bmfont
- pretty commonly used format (though https://github.com/shampoofactory/bmfont_rs is more recently updated and has a more idiomatic API, so maybe let's just add that instead) -
cgmath
- still fairly widely used as it's stable and has been around for a long time -
ezing
- feels fairly 'done', not sure how much you could really add to this other than more easing functions
As far as I can tell, most of the others are not being developed and/or have been superceded by other crates.
I'll try to see if any other WG members have any strong opinions on this.
I found https://github.com/rust-gamedev/arewegameyet/issues/372 . So, it seems we already removed a bunch of crates in 2020.
amethyst
- I don't think users who come to arewegameyet
are looking for historically relevant crates. They probably want to look at what rust ecosystem offers them today.
cgmath
- I just thought it would better to redirect users towards glam/euclid/nalgebra which are still maintained. But I will leave this to the judgement of WG members.
I honestly don't mind either way, and just to get things going, I'll propose:
Do all the non-contentious ones first, and discuss amethyst and cgmath after that.
For amethyst and cgmath, we even have the option of listing them (since they're high up in Google searches) and explicitly pointing the readers to the newer ones.
blocked on #546 which might be merged before summer :+1:
blocked on #546 which might be merged before summer 👍
Sorry for the delay on this, I've not forgotten! I need to find a new reviewer for the PR since Ozkriff's no longer available.
Once that PR is merged, my plan is to take the list of crates that Jubilee had removed in their (now-closed) PR, and move them all into the archive section.
If we decide later down the line we do want to go down the route of removing crates entirely, it'll be easy to find them (since they'll all be tagged as archived = true
), but hopefully this by itself is a good first step towards cleaning the site up - I agree it's long overdue.
#546 is merged now[^1], so hopefully we can get this moving again in 2024 🎆
I've re-raised @workingjubilee's PR using the new archive functionality - I'd appreciate it if people in this thread could give it a look over and make sure I've not missed/broken anything 😄
- #556
Once this is merged, we can maybe take a look at archiving some more of the crates mentioned here: https://github.com/rust-gamedev/arewegameyet/issues/95#issuecomment-1612288616
Given that we're just de-emphasizing crates now instead of removing them from the site entirely, hopefully there'll be a bit more consensus about which ones should be moved.
[^1]: I had to use admin rights to do it, which I feel a bit uncomfortable about, but nobody other than me is reviewing changes at the moment and I really don't want this issue to be blocked for a sixth year...
#556 is merged as well now :)
Further PRs to archive crates that are unambigiously dead/unmaintained would be welcomed.