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

Replace dependency on dirs with home #1490

Merged

Conversation

the-kenny
Copy link
Contributor

The dirs crate recently started depending on the options-ext crate
which uses copyleft license (MPL). This (unnecessary) dependency causes
licensing issues for various users by possibly poisoning the dependency
tree of their projects.

This change replaces the dirs crate with home. The home crate is
maintained by the cargo team and offers the same functionality.

As a bonus, this change also results in a slightly smaller dependency
tree.

@workingjubilee
Copy link
Member

It has been 9 months since that change was merged, and it was released quite a while ago.

I do not enjoy the choice of words like "poison" and "tainted", because by depending on dirs, this accusation is currently fully extensible to us. If I refuse to merge this, then perhaps I am now also "poisoning" someone's dependency tree, even though I have already released several versions of cargo-pgrx and pgrx-pg-config and... well, frankly, this function doesn't actually get linked into actual Postgres extensions generated by pgrx, but is only used by the pgrx build system, so I only barely see why anyone should care. It's not like no one uses gcc, a GPL compiler.

Anyways, for these reasons, I would prefer to merge this with a different commit message. I usually simply exercise this power at-will to make a message closer to truth or even just better fit a style, but as this would be exercising a different class of editorial power, I am happy to allow you to rectify it first, if you would prefer.

@workingjubilee
Copy link
Member

As a bonus, this change also results in a slightly smaller dependency
tree.

This doesn't really seem to be a meaningful bonus as, as far as I can tell, it just means reduced cross-platform support, and while we don't really support Redox, I don't hate the idea of someone trying to build Postgres with Rust extensions on an operating system written in Rust. It seems rather funny, even.

The `dirs` crate recently started depending on the `options-ext` crate
which uses copyleft license (MPL). This unnecessary dependency causes
minor inconveniences by e.g. requiring users to ship a download link
to the crate's source code (already published on crates.io). More
importantly, we would like to not have more random questions about
licensing updates that seem like they are poorly motivated.

This change replaces the `dirs` crate with `home`. The `home` crate is
maintained by the cargo team and offers the same functionality.
@workingjubilee
Copy link
Member

I have resolved the merge conflicts in this PR caused by introducing pervasive use of workspace dependencies. I have toned down the commit message to accurately reflect the actual annoyance of us somehow using the MPL, because it's not exactly like this person is smuggling the AGPL into our source code.

I kind of wish they would have. Then I could have just gone "oh, okay, they're being super-silly" and clicked "merge" instead of feeling like I have to actually understand the case.

@workingjubilee workingjubilee merged commit 9212eee into pgcentralfoundation:develop Jan 29, 2024
8 checks passed
@workingjubilee
Copy link
Member

workingjubilee commented Jan 30, 2024

I have followed up on this in #1502 and #1504.

workingjubilee added a commit that referenced this pull request Mar 1, 2024
Welcome to pgrx 0.12.0-alpha.1!

Say the magic words with me!

```shell
cargo install cargo-pgrx --locked --version 0.12.0-alpha.1
```

# Breaking Changes

## No more dlopen!

Perhaps the most exciting change this round is @usamoi's contribution in
#1468 which means that
we no longer perform a `dlopen` in order to generate the schema. The
cost, such as it is, is that your pgrx extensions now require a
`src/bin/pgrx_embed.rs`, which will be used to generate the schema. This
has much less cross-platform issues and will enable supporting things
like `cargo binstall` down the line.

It may be a bit touchy on first-time setup for transitioning older
repos. If necessary, you may have to directly add a
`src/bin/pgrx_embed.rs` and add the following code (which should be the
only code in the file, though you can add comments if you like?):

```rust
::pgrx::pgrx_embed!();
```

Your Cargo.toml will also want to update its crate-type key for the
library:
```toml
[lib]
crate-type = ["cdylib", "lib"]
```

## Library Code

- pgrx-pg-sys will now use `ManuallyDropUnion` thanks to @NotGyro in
#1547
- VARHDRSZ `const`s are no longer `fn`, thanks to @workingjubilee in
#1584
- We no longer have `Interval::is_finite` since
#1594
- We translate more `*_tree_walker` functions to the same signature
their `*_impl` version in Postgres 16 has:
#1596
- Thanks to @eeeebbbbrrrr in
#1591 we no longer have
the `pg_sql_graph_magic!()` macro, which should help with more things in
the future!

# What's New

We have quite a lot of useful additions to our API:

- `SpiClient::prepare_mut` was added thanks to @XeniaLu in
#1275
- @usamoi also contributed bindings subscripting code in
#1562
- For `#[pg_test]`, you have been able to use `#[should_panic(expected =
"string")]` to anticipate a panic that contains that string in that
test. For various reasons, `#[pg_test(error = "string")]` is much the
same. Now, you can also use `#[pg_test(expected = "string")]`, in the
hopes that is easier to stumble across, as of
#1570

## `Result<composite_type!("..."), E>` support

- In #1560 @NotGyro
contributed support for using `Result<composite_type!("Name"), E>`, as a
case that had not been handled before.

## Significantly expanded docs
Thanks to @rjuju, @NotGyro, and @workingjubilee, we now have
significantly expanded docs for cargo-pgrx and pgrx in general. Some of
these are in the API docs on https://docs.rs or the READMEs, but there's
also a guide, now! It's not currently published, but is available as an
[mdbook](https://github.com/rust-lang/mdBook) in the repo.

Some diagnostic information that is also arguably documentation, like
comments and the suggestion to `cargo install`, have also been improved,
thanks to @workingjubilee in
- #1579
- #1573

## `#[pg_cast]`

An experimental macro for a `CREATE CAST` was contributed by @xwkuang5
in #1445!

## Legal Stuff

Thanks to @the-kenny in
#1490 and
@workingjubilee in
#1504, it was brought to
our attention that some dependencies had unusual legal requirements. So
we fixed this with CI! We now check our code included into pgrx-using
binaries is MIT/Apache 2.0 licensed, as is common across crates.io,
using `cargo deny`!. The build tools will have more flexible legal
requirements (partly due to the use of Mozilla Public License code in
rustls).

# Internal Changes
Many internal cleanups were done thanks to
- @workingjubilee in too many PRs to count!
- @thomcc found a needless condition in
#1501
- @nyurik in too many PRs to count!

In particular:
- we now actually `pfree` our `Array`s we detoasted as-of
#1571
- creating a `RawArray` is now low-overhead due to
#1587

## Soundness Fixes
We had a number of soundness issues uncovered or have added more tests
to catch them.
- Bounds-checking debug assertions for array access by @NotGyro in
#1514
- Fix unsound `&` and `&mut` in `fcinfo.rs` by @workingjubilee in
#1595

## Less Deps
Part of the cleanup by @workingjubilee was reducing the number of deps
we compile:
* cargo-pgrx: reduce trivial dep usages in
#1499
* Update 2 syn in #1557

Hopefully it will reduce compile time and disk usage!

## New Contributors
* @the-kenny made their first contribution in
#1490
* @xwkuang5 made their first contribution in
#1445
* @rjuju made their first contribution in
#1516
* @nyurik made their first contribution in
#1533
* @NotGyro made their first contribution in
#1514
* @XeniaLu made their first contribution in
#1275

**Full Changelog**:
v0.12.0-alpha.0...v0.12.0-alpha.1
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

Successfully merging this pull request may close these issues.

2 participants