Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

crate.io's policy/perspective on trust and crate squatting #624

Closed
softprops opened this issue Mar 13, 2017 · 10 comments
Closed

crate.io's policy/perspective on trust and crate squatting #624

softprops opened this issue Mar 13, 2017 · 10 comments

Comments

@softprops
Copy link

softprops commented Mar 13, 2017

I am a big fan of rust and a big fan of the rust community. However there are still some areas that I think could use some improvement in terms of things that may erode trust for engineers new to rust and exploring the crate landscape. In particular crates.io's policy on crate squatting.

Here are two scenarios that are not ideal and have actually happened to me more than once and which I would like to shield from new rust users and enthusiasts.

advertisement of placeholder crates

Let's say a user new to rust, Jim, get's an earful of excitement from his co-worker Jill about rust and this new ecosystem of async io libraries called tokio. Jim has his own go-to language but is now curious and little excited about rust and would like to compare it his typical developer experience. He installs rust and checks out crates.io. He notices right off the bat that there are three new crates related to tokio.

screen shot 2017-03-13 at 12 03 02 am

Wow, sounds like Jill was right! Jim clicks on one of the crates, cut and pastes the crate's name into his Cargo.toml file, then runs cargo update.

He's smiles when he sees the lock file generated as a result. Unsure of what do to next he heads back to crates.io to take a closer look. He then notices the description "Empty crate, used only to reserve the name". This must be my mistake...

screen shot 2017-03-12 at 8 47 47 pm

Hrm that's interesting. Jim scrolls down and see that 3 others have downloaded this crate
Are 3 others really using this crate???

screen shot 2017-03-13 at 12 18 52 am

Jim goes back to the two tokio crates and notices all three are in the same state. Jim goes to work the next day and says, no thanks to rust. It looks interesting but the ecosystem looks very immature. A lots of crates that do nothing!

the let down of ambitious librarians

Let's switch to an alternate scenario. This time Jill a long term rustacean is burning the midnight oil on a new tokio library that handles dns resolution, let's say she wants to call it tokio-dns has it does dns resolution.

She excitedly types cargo publish to share her hard work. Whoops looks like that name's taken. Okay she thinks, it's kind of lame because the crate claimed that name is actually just a place holder.

She shrugs it off and thinks about a another name. She does a string replacement across her code with a new name, tokio-lookup. cargo publish round two. Nope, its claimed and again only parked.

Jill gets frustrated at the first two strikes and is loosing steam but she's not ready to give up. She picks a much less ideal name tokio-resolve. Round three, once again she is defeated. Jill's respect for crates.io just went down and she goes to sleep for the night.

thoughts and suggestions

Crates.io doesn't seem to have an official policy that would remediate this kind of eroded trust in the ecosystem. In fact the lack of a policy may encourage it as more crate authors learn to park their name to ensure it will be available before they've actually made a commitment to publish any content. This of course is a problem if they change their mind later a never decided to publish any content.

One solution could be namespaces which could have other interesting properties because crate name collision avoidance, but I'm not sure how that would work in extern crate declarations.

Thoughts?

@carols10cents
Copy link
Member

As another data point, rubygems.org has had the same first-come-first-serve naming policy for 8 years, and trust in the ecosystem has not eroded that I can tell.

@steveklabnik
Copy link
Member

steveklabnik commented Mar 13, 2017

Crates.io doesn't seem to have an official policy that would remediate this kind of eroded trust in the ecosystem.

To be clear, here's the policy: http://doc.crates.io/policies.html

@sgrif
Copy link
Contributor

sgrif commented Mar 13, 2017

Perhaps it's worth further clarifying what the policy is when a crate has been inactive for a sufficiently long period of time (e.g. years), and the existing owner(s) cannot be reached?

@steveklabnik
Copy link
Member

Perhaps it's worth further clarifying what the policy is when a crate has been inactive for a sufficiently long period of time (e.g. years), and the existing owner(s) cannot be reached?

The policy is clear already, imho:

We will do what the law requires us to do, and address flagrant violations of the Rust Code of Conduct.

That's it.

@sgrif
Copy link
Contributor

sgrif commented Mar 13, 2017

I think this line is confusing then:

If necessary, the team may reach out to inactive maintainers and help mediate the process of ownership transfer.

To me it implies that there would be some action for those cases.

@steveklabnik
Copy link
Member

Gotcha. Yes, that should be made more clear, then. Like, we will try to help, but unless the owner of the crate says okay, we will not do anything.

@softprops
Copy link
Author

softprops commented Mar 13, 2017

rubygems.org has had the same first-come-first-serve naming policy for 8 years, and trust in the ecosystem has not eroded that I can tell.

I'm fine with first come first serve but it feels odd for a package manager to expose/advertise empty packages.

I'm guess I'm asking if there's any hesitation to raise the bar in terms of what you'll find on crates.io vs other package hosts. This was probably a more extreme example but I have came across 0.1.0 crates in the past that only contained the default hello world contents while they advertised something more.

If there's a low effort solution for reducing disappointment I think it may be a worth while endeavor if for no other reason than setting and meeting expectations.

@carols10cents
Copy link
Member

I'm guess I'm asking if there's any hesitation to raise the bar in terms of what you'll find on crates.io vs other package hosts.

To be clear, rubygems.org does not have any bar to clear for publishing code there either.

@softprops
Copy link
Author

I'm ok with this issue being closed if there's nothing to change.

I can empathize with a rationale of having a low bar of entry for inclusiveness. Anyone that has tried to set up a project to publish to maven central will as well ;)

Thanks for posting the policy link about name squatting. I think that's all I really needed.

@carols10cents
Copy link
Member

Ok, thank you!!

bors added a commit that referenced this issue Dec 18, 2019
…-ember-7.7.2, r=Turbo87

Bump eslint-plugin-ember from 7.0.0 to 7.7.2

Bumps [eslint-plugin-ember](https://github.com/ember-cli/eslint-plugin-ember) from 7.0.0 to 7.7.2.
<details>
<summary>Release notes</summary>

*Sourced from [eslint-plugin-ember's releases](https://github.com/ember-cli/eslint-plugin-ember/releases).*

> ## v7.7.2
> #### 🐛 Bug Fix
> * [#621](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/621) Fix false positive with `ignoreNonThisExpressions` option in `use-ember-get-and-set` rule ([@&#8203;Exelord](https://github.com/Exelord))
>
> #### 📝 Documentation
> * [#620](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/620) Use consistent prefixes for rule descriptions ([@&#8203;bmish](https://github.com/bmish))
>
> #### 🏠 Internal
> * [#625](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/625) Add eslint-plugin-jest internally and enable rules ([@&#8203;bmish](https://github.com/bmish))
> * [#624](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/624) Add eslint-plugin-unicorn internally and enable recommended rules ([@&#8203;bmish](https://github.com/bmish))
>
> #### Committers: 2
> - Bryan Mishkin ([@&#8203;bmish](https://github.com/bmish))
> - Maciej Kwaśniak ([@&#8203;Exelord](https://github.com/Exelord))
>
> ## v7.7.1
> #### 🐛 Bug Fix
> * [#615](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/615) Fix issue causing assert to fire in `getSourceModuleName` util function ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> #### Committers: 1
> - Pat O'Callaghan ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> ## v7.7.0
> #### 🚀 Enhancement
> * [#592](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/592) Update `no-classic-classes` rule to catch classic Ember Data model classes ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> #### 🐛 Bug Fix
> * [#610](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/610) Fix invalid `no-get` rule autofix caused by invalid JS variable name ([@&#8203;bmish](https://github.com/bmish))
> * [#607](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/607) Fix spread property bug in `require-super-in-init` rule ([@&#8203;bmish](https://github.com/bmish))
> * [#600](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/600) Add missing schema validation for options on many rules ([@&#8203;bmish](https://github.com/bmish))
>
> #### 🏠 Internal
> * [#611](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/611) Add many missing tests for lines without test coverage ([@&#8203;bmish](https://github.com/bmish))
>
> #### Committers: 2
> - Bryan Mishkin ([@&#8203;bmish](https://github.com/bmish))
> - Pat O'Callaghan ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> ## v7.6.0
> #### 🚀 Enhancement
> * [#594](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/594) Add new rule `no-get-with-default` ([@&#8203;steventsao](https://github.com/steventsao))
>
> #### Committers: 1
> - Steven Tsao ([@&#8203;steventsao](https://github.com/steventsao))
>
> ## v7.5.0
> #### 🚀 Enhancement
> * [#583](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/583) Update `no-observers` rule to handle decorators ([@&#8203;bmish](https://github.com/bmish))
> * [#577](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/577) Add autofixer to `no-get` rule ([@&#8203;bmish](https://github.com/bmish))
>
></tr></table> ... (truncated)
</details>
<details>
<summary>Changelog</summary>

*Sourced from [eslint-plugin-ember's changelog](https://github.com/ember-cli/eslint-plugin-ember/blob/master/CHANGELOG.md).*

> ## v7.7.2 (2019-12-12)
>
> #### 🐛 Bug Fix
> * [#621](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/621) Fix false positive with `ignoreNonThisExpressions` option in `use-ember-get-and-set` rule ([@&#8203;Exelord](https://github.com/Exelord))
>
> #### 📝 Documentation
> * [#620](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/620) Use consistent prefixes for rule descriptions ([@&#8203;bmish](https://github.com/bmish))
>
> #### 🏠 Internal
> * [#625](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/625) Add eslint-plugin-jest internally and enable rules ([@&#8203;bmish](https://github.com/bmish))
> * [#624](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/624) Add eslint-plugin-unicorn internally and enable recommended rules ([@&#8203;bmish](https://github.com/bmish))
>
> #### Committers: 2
> - Bryan Mishkin ([@&#8203;bmish](https://github.com/bmish))
> - Maciej Kwaśniak ([@&#8203;Exelord](https://github.com/Exelord))
>
> ## v7.7.1 (2019-11-29)
>
> #### 🐛 Bug Fix
> * [#615](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/615) Fix issue causing assert to fire in `getSourceModuleName` util function ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> #### Committers: 1
> - Pat O'Callaghan ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> ## v7.7.0 (2019-11-29)
>
> #### 🚀 Enhancement
> * [#592](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/592) Update `no-classic-classes` rule to catch classic Ember Data model classes ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> #### 🐛 Bug Fix
> * [#610](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/610) Fix invalid `no-get` rule autofix caused by invalid JS variable name ([@&#8203;bmish](https://github.com/bmish))
> * [#607](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/607) Fix spread property bug in `require-super-in-init` rule ([@&#8203;bmish](https://github.com/bmish))
> * [#600](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/600) Add missing schema validation for options on many rules ([@&#8203;bmish](https://github.com/bmish))
>
> #### 🏠 Internal
> * [#611](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/611) Add many missing tests for lines without test coverage ([@&#8203;bmish](https://github.com/bmish))
>
> #### Committers: 2
> - Bryan Mishkin ([@&#8203;bmish](https://github.com/bmish))
> - Pat O'Callaghan ([@&#8203;patocallaghan](https://github.com/patocallaghan))
>
> ## v7.6.0 (2019-11-19)
>
> #### 🚀 Enhancement
> * [#594](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/pull/594) Add new rule `no-get-with-default` ([@&#8203;steventsao](https://github.com/steventsao))
>
> #### Committers: 1
> - Steven Tsao ([@&#8203;steventsao](https://github.com/steventsao))
>
> ## v7.5.0 (2019-11-11)
></tr></table> ... (truncated)
</details>
<details>
<summary>Commits</summary>

- [`1805883`](ember-cli/eslint-plugin-ember@1805883) v7.7.2
- [`39539bc`](ember-cli/eslint-plugin-ember@39539bc) Update CHANGELOG
- [`9943b7e`](ember-cli/eslint-plugin-ember@9943b7e) Merge pull request [#625](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/issues/625) from bmish/eslint-plugin-jest
- [`cb4824d`](ember-cli/eslint-plugin-ember@cb4824d) chore(lint): add eslint-plugin-jest internally and enable rules
- [`dc149b5`](ember-cli/eslint-plugin-ember@dc149b5) Merge pull request [#624](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/issues/624) from bmish/eslint-plugin-unicorn
- [`9a6a4be`](ember-cli/eslint-plugin-ember@9a6a4be) chore(lint): add eslint-plugin-unicorn internally and autofix recommended rules
- [`c93198c`](ember-cli/eslint-plugin-ember@c93198c) build(deps-dev): bump eslint-plugin-import from 2.18.2 to 2.19.1 ([#623](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/issues/623))
- [`e2c5235`](ember-cli/eslint-plugin-ember@e2c5235) build(deps): bump snake-case from 3.0.1 to 3.0.2 ([#622](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/issues/622))
- [`4c6aedd`](ember-cli/eslint-plugin-ember@4c6aedd) Merge pull request [#621](https://github-redirect.dependabot.com/ember-cli/eslint-plugin-ember/issues/621) from Exelord/fix/ignore-this-expressions
- [`ed6301a`](ember-cli/eslint-plugin-ember@ed6301a) chore: fix lint violation
- Additional commits viewable in [compare view](ember-cli/eslint-plugin-ember@v7.0.0...v7.7.2)
</details>
<br />

[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=eslint-plugin-ember&package-manager=npm_and_yarn&previous-version=7.0.0&new-version=7.7.2)](https://dependabot.com/compatibility-score.html?dependency-name=eslint-plugin-ember&package-manager=npm_and_yarn&previous-version=7.0.0&new-version=7.7.2)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

**Note:** This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

You can always request more updates by clicking `Bump now` in your [Dependabot dashboard](https://app.dependabot.com).

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language
- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language
- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language
- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language
- `@dependabot badge me` will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):
- Update frequency (including time of day and day of week)
- Pull request limits (per update run and/or open at any time)
- Automerge options (never/patch/minor, and dev/runtime dependencies)
- Out-of-range updates (receive only lockfile updates, if desired)
- Security updates (receive only security updates, if desired)

</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants