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

Update ownership and license #2943

Merged

Conversation

dennisdoomen
Copy link
Member

No description provided.

@coveralls
Copy link

Pull Request Test Coverage Report for Build 12762300226

Details

  • 3 of 3 (100.0%) changed or added relevant lines in 1 file are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage remained the same at 97.403%

Totals Coverage Status
Change from base Build 12753870874: 0.0%
Covered Lines: 12288
Relevant Lines: 12472

💛 - Coveralls

Copy link

Qodana for .NET

It seems all right 👌

No new problems were found according to the checks applied

💡 Qodana analysis was run in the pull request mode: only the changed files were checked
☁️ View the detailed Qodana report

Contact Qodana team

Contact us at qodana-support@jetbrains.com

@dennisdoomen dennisdoomen merged commit df7e9bf into fluentassertions:release-8.0 Jan 14, 2025
8 checks passed
@dennisdoomen dennisdoomen deleted the prepare-launch branch January 14, 2025 10:20
@ScarletKuro
Copy link

ScarletKuro commented Jan 14, 2025

Sorry to chip in. I just noticed that the Apache 2.0 license mentions was completely removed. I'm not a lawyer, but I don't think you can re-license the entire project like this without obtaining the consent of all the contributors. If there are contributors who do not agree to the new license, then you would have to maintain the original Apache 2.0 license for that code contributed under it.

Upd: I also do not see on https://xceed.com/products/unit-testing/fluent-assertions/ which version this license applies to. I would expect that v7 and earlier are not affected, as you cannot claim the license for past releases according to Apache license, and that the new licensing applies only to v8 and above. However, it would be helpful if this were explicitly mentioned so others could avoid any hassle and confusion.

@evilbaschdi
Copy link

evilbaschdi commented Jan 14, 2025

Does this update mean, some has to pay now to use FluentAssertion?
Is this only for FluentAssertion 8 and higher or also for FluentAssertion 7 and below?

@nicolas17
Copy link

Does this update mean, some has to pay now to use FluentAssertion? Is thi only for FluentAssertion 8 and higher or also for FluentAssertion 7 and below?

The Apache license for v7 already granted you a "perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license", they can't take it away retroactively.

@dennisdoomen
Copy link
Member Author

dennisdoomen commented Jan 14, 2025

. I would expect that v7 and earlier are not affected, as you cannot claim the license for past releases according to Apache license, and that the new licensing applies only to v8 and above. However, it would be helpful if this were explicitly mentioned so others could avoid any hassle and confusion.

This is correct. v7 will remain free indefinitely and will still receive critical fixes. v8 will only require a license when you use it in non-commercial projects.

@jpdillingham
Copy link

@dennisdoomen can you please address the questions posed by @ScarletKuro?

Specifically, do you have a CLA that grants you this authority, or have you obtained consent from all 222 contributors?

@dennisdoomen
Copy link
Member Author

dennisdoomen commented Jan 14, 2025

Thank you all for raising these important questions. Fluent Assertions' transition to a dual-licensing model has been carefully planned in compliance with standard practices for open-source projects.

The new commercial version (V8) represents a significant evolution of the library, incorporating improvements and features that were developed under the direction of Xceed and the original creators. These updates are governed by the licensing terms specified for this version, which differ from the Apache-licensed versions.

Regarding your concern about contributor consent:

  • Fluent Assertions has always been released under permissive open-source licenses (like Apache 2.0), which allow for commercial use and derivative works. These licenses inherently grant the rights to build upon and redistribute the project, as long as proper attribution and compliance with the license are maintained.
  • As a new version, Fluent Assertions 8 builds on the foundation of prior work while incorporating significant updates and improvements. It is being released under the Xceed Community License, in line with the rights granted by earlier licenses.

If you have further questions or concerns, feel free to reach out. Transparency and clarity are key, and we’re happy to provide more details. I've personally invested almost 15 years of my private time in this project, and I am really happy with this new development.

Once again, v7 will remain free indefinitely and will still receive critical fixes. v8 will only requires a license when you use it in commercial projects.

@RassK
Copy link

RassK commented Jan 14, 2025

. I would expect that v7 and earlier are not affected, as you cannot claim the license for past releases according to Apache license, and that the new licensing applies only to v8 and above. However, it would be helpful if this were explicitly mentioned so others could avoid any hassle and confusion.

This is correct. v7 will remain free indefinitely and will still receive critical fixes. v8 will only require a license when you use it in non-commercial projects.

This does not seem so simple. There are companies contributing to FOSS projects that are then used in their enterprise packages provided to other enterprises. How does this licensing work then? It makes this situation very complicated, putting others in risk of violating the license.

@dennisdoomen
Copy link
Member Author

This does not seem so simple. There are companies contributing to FOSS projects that are then used in their enterprise packages provided to other enterprises. How does this licensing work then? It makes this situation very complicated, putting others in risk of violating the license.

I don't get that scenario. FA is just a unit testing project that never gets shipped to anybody else in a package. Can you elaborate?

@fjavimad
Copy link

One question about the new license agreement. I've seen a file in the commit Src/init.ps1, that will check the windows register. Don't you think that only for this reason the most of the developers will leave of use this library?, and that in 1 or 2 years this project will be finished?.

@Snazzie
Copy link

Snazzie commented Jan 14, 2025

. I would expect that v7 and earlier are not affected, as you cannot claim the license for past releases according to Apache license, and that the new licensing applies only to v8 and above. However, it would be helpful if this were explicitly mentioned so others could avoid any hassle and confusion.

This is correct. v7 will remain free indefinitely and will still receive critical fixes. v8 will only require a license when you use it in non-commercial projects.

You mean commercial projects.

@RassK
Copy link

RassK commented Jan 14, 2025

This does not seem so simple. There are companies contributing to FOSS projects that are then used in their enterprise packages provided to other enterprises. How does this licensing work then? It makes this situation very complicated, putting others in risk of violating the license.

I don't get that scenario. FA is just a unit testing project that never gets shipped to anybody else in a package. Can you elaborate?

I understand that it depends on who runs the FA included components. FOSS doesn't guarantee that it will be the packager in every case. Whole FOSS projects can be privately packaged and used in enterprise environments, but this involves running FA in completely different environment (not any more in a free open source environment).

@dennisdoomen
Copy link
Member Author

You mean commercial projects.

Yes, sorry. That's what I meant.

@Greg-Smulko
Copy link

I think it would be fair to include this info in the https://fluentassertions.com/upgradingtov8 guide?

Also, could you point me to some info about the pricing for commercial projects and how to obtain a commercial license?

@ckuetbach
Copy link

Which license is needed for commercial software running Tests with FA at a buildserver with every developer at a company can review the results?

@dennisdoomen
Copy link
Member Author

I think it would be fair to include this info in the https://fluentassertions.com/upgradingtov8 guide?

To mention the change of license? Yeah, make sense.

Also, could you point me to some info about the pricing for commercial projects and how to obtain a commercial license?

https://xceed.com/products/unit-testing/fluent-assertions/

@Greg-Smulko
Copy link

Also, could you point me to some info about the pricing for commercial projects and how to obtain a commercial license?

https://xceed.com/products/unit-testing/fluent-assertions/

Thanks a lot!

Well, it's not entirely cheap, especially for a team of 100+ devs.
My colleague suggested a rename to AffluentAssertions. 😉 💰

We'll stay on v7 now and long term either wait for a fork of v7, or migrate to Shouldly or another alternative, I'm afraid.

Thanks a lot for your great work on FluentAssertions!

@macsux
Copy link

macsux commented Jan 14, 2025

Few questions:

  • Do you plan to maintain a permanent branch in this repo representing v7 Apache license where people can contribute to?
  • How will future contributions to v7 be governed? Will there be a reasonable and effective merge and release process for PRs made into v7 branch? (I'm asking if we're gonna end up in situation where PRs will be hanging indefinitely or when merged no Nuget releases in reasonable time)
  • Have you considered moving the commercial into a new repo to allow evolution of the Apache version to continue here?

@nerdybeast
Copy link

nerdybeast commented Jan 14, 2025

I don't understand the pricing model, we have 100+ devs working on 100+ services. Half of those services are using FA meanwhile, all the devs have access to build servers that build those services using FA... I'm a little surprised this move doesn't switch to a new repo/package while sunsetting this FA repo in its current state at version 7 with the Apache 2.0 license.

@ajeckmans
Copy link

It is similar, but not as feature rich. I'm going to have to hand roll something similar to the AssertionScope and it will (initially anyways) not be as easy and out of the way in usage as it is with FA.

@klemmchr
Copy link

What is interesting to see is how this license change is basically a rugpull. It has been made 2 days ago, shortly before the 8.0 release but after all changes to 8.0 have been made. All contributions made prior to the license change are licensed under the old Apache license but 8.0 is being framed as being under the new shitty commercial license. This is NOT the case. 8.0 is de facto licensed under Apache 2.0. You cannot retroactively change a license during a release AFTER changes have been made under the old license and then claim that the new version is licensed under the new license. This is why projects are doing dedicated releases when changing licenses to avoid such a mess.

Doing such things is expected from amateurs. But not from a Microsoft MVP.

@julealgon
Copy link

Just in case - here's the fork called AwesomeAssertions. I haven't tested it yet myself.

Weird. It's just a fork of v7 without any commitment to maintain it. We'll be maintaining v7 as well with bugfixes and vulnerabilities, so why bother. Unless, you don't trust us anymore.

@dennisdoomen , I had a ton of respect for you. We interacted in a few issues, I watched conference talks from you, I held you in pretty high regard and was always a fan of how FluentAssertions was designed. I used to recommend FA by default for every single test project in all the companies I've worked with.

But the way you handled this whole ordeal basically killed my trust in you, and consequently, on this repository. You are correct then with the bolded: I don't trust you anymore. You threw contributors under the bus, and you made this change in a very shady manner.

As an architect, I've already made the recommendation of moving away from FluentAssertions in our entire company. We'll initially pin all references (like some folks have already suggested above, to prevent accidental upgrades to v8), and then look for alternatives such as the separate fork mentioned there, Shouldly, or TUnit.Assertions. I certainly do not appreciate the extra technical debt your decision has caused on us, but I guess I have to get used to that after this, and the debacle that was Moq's move last year (which also forced us to do a bunch of changes company-wide).

I don't have any problems with developers getting proper compensation for their work, but the path you took here is not acceptable. I hope you will reconsider your approach here, or in the future.

Good luck.

@nocturn9x
Copy link

nocturn9x commented Jan 17, 2025

Hope you made a loooot of money selling the rights to your software (and evidently, your soul) to a company, since you also paid the price in reputational damage and are unlikely to make any more in the FOSS community. Good luck indeed.

@nocturn9x
Copy link

This is just episode 376 in the saga of:

  • Open source maintainers build a successful product.
  • The amount of work to maintain it raises to a point where the authors can no longer cope.
  • In order to keep up with the demand from users, they need a source of income.
  • They decide to charge for commercial use of the product, and only from a new version, keeping older versions free.
  • Entitled brats from the community bridage the authors, because they want everything for free.

Are you one of the angry users? I suggest you do this:

  • Look at the number of downloads of the package.
  • Look at the number of GitHub sponsors.
  • Realize that the money that comes in will allow both of the authors to spend about HALF A DAY each month on maintaining this.
  • Look at the commits, and see if that looks like half a day worth of work.

Since you are complaining, you must be using FA in a commercial product, otherwise you wouldn't be affected. If you are not one of the 18 current sponsors, then you are part of the problem. You have been using this for free without any support for the authors. Software doesn't grow on trees. It was great while it lasted, but now you are going to have to make a choice: stay on v7, or get a license. Or: show your true colors.

Anyway, I love FluentAssertions, and I hope this plays out well. I wish the authors all the luck in the world. We need open source to be more sustainable.

You understand jackshit about how FOSS works, and it shows. Wanting the license to be respected does not make users entitled brats. What a moronic comment.

@nocturn9x
Copy link

Every single one of the people here who finds charging for software absurd and 'greedy' should look in the mirror and wonder why their employers are still paying them. After all, according to their logic, paying for writing and maintaining code is absurd.

What? Why such a generalization? Did you miss the price point for what the library does? How is it helping so much that it costs almost as much as Rider or Copilot?

Please re-read what I said. "the people here who finds charging for software absurd and 'greedy'". I even said the price point is debatable. It might be too high, or too low, who knows? Picking a price is very difficult.

It sucks that you have to pay for stuff that was free last week, but that doesn't make the maintainers greedy, which is my point. The problem is that we all are software devs and in the .NET world with tools like this, these aren't usually used for personal small projects, but in commercial large(r) projects. If we argue that the tools we're using should be free, why should your client have to pay for your work? For that large commercial project?

Look, it's one thing to be paid for the work they do. Another thing is asking for an astronomical payment for each seat every year, non-transferable for something that is applicable in an absolute fraction of the codebase - only test assert sections. And yet another is claiming the whole source code as basically proprietary (if you use it for commercial product) all of a sudden after so many contributions from outside, with a major semver bump.

Sure. For a dev in San Francisco it might be pocket change, for a dev in a country with way lower wages it might be an absurd price point. However that point is valid with other software as well. The core vibe in this thread is that it's greedy to ask any money for labour poured into a software project like this one and that is something we as .NET ecosystem shouldn't want.

I don't think you'll get the point though considering the tone of your message with roundabout insults, but please look at the bigger picture, not "well then stop accepting payment for your work, idiot, and see how it feels".

I've read most posts in this thread and it's a familiar story like we've seen with ImageSharp, Identity Server and other OSS projects which went commercial: the users revolt that they don't want to pay, it's a greedy cash grab, it's insane (literal words from this thread). It's pure entitlement. No-one owes you anything, yet people act like someone stole their salary.

I think you need a lesson in reading comprehension. The core vibe in this thread is that it's shitty and potentially illegal to relicense contributions made under the Apache 2.0 License under a different one which is fundamentally incompatible with it. Actually read the important comments instead of focusing on the ones bitching, although I guess that doesn't make a good story to write your contrived nonsense soup where you strawman your way into looking all high and mighty.

@SimonCropp
Copy link

In My Opinion...

flowchart TD
%% Nodes
    Invalid("You have no<br>right to complain")
    Valid("You have a right to<br>be disappointed and<br>provide polite feedback")
    YouContribute{"You made<br>non-trivial<br>contributions?"}
    YouSponsor{"You sponsor<br>with $$?"}
    EmployerContribute{"Employer made<br>non-trivial<br>contributions?"}
    EmployerSponsor{"Employer<br>sponsors<br>with $$?"}

%% Edge connections between nodes
    YouContribute -- Yes--> Valid
    YouSponsor -- Yes--> Valid
    EmployerContribute -- Yes--> Valid
    EmployerSponsor -- Yes--> Valid
    YouContribute -- No --> YouSponsor
    YouSponsor -- No --> EmployerContribute
    EmployerContribute -- No --> EmployerSponsor
    EmployerSponsor -- No --> Invalid
Loading

@tomgron
Copy link

tomgron commented Jan 17, 2025

I'm leaving FluentAssertions for good - this is camper move, won't use this ever again.

Where will you go next?

Maybe Shouldly - not as good but an alternative anyways.

@matkoch
Copy link
Contributor

matkoch commented Jan 17, 2025

A question to all the folks talking about trust and shame: did you ever hear about the AppGet story? And if yes, how do you cope with staying in the Microsoft stack?

Edit: sorry for the folks not coping well :(

@azygis
Copy link

azygis commented Jan 17, 2025

A question to all the folks talking about trust and shame: did you ever hear about the AppGet story? And if yes, how do you cope with staying in the Microsoft stack?

What exactly does AppGet have to do with FluentAssertions? Or are we now going whataboutism way?

@matthiaslischka
Copy link
Contributor

Good for you and thank you for many years of hard work. The people will soon realize, that the harm is very small at the end of the day. You can pay, stay on 7, use a fork or switch to an other framework.

@STeeL835
Copy link

STeeL835 commented Jan 17, 2025

@matkoch Honestly I didn't even hear about this story, I was using chocolatey and was glad Microsoft made a pre installed apt. Reading about it now I feel for the author of AppGet, they definitely should've at least credit him like he deserves. But my opinion on Microsoft already isn't really about trusting them - some teams do a really good job, and some, well, do a taskbar that still doesn't work properly after 4 years since win11 came out (the only thing that's stopping me from switching to win10 are laptop drivers that are for win11).

And about Fluent Assertions, the way I see it:
The whole situation is not entirely clear for me, as there's not much feedback from owners. From what I understand, it is sad for me to see that it's becoming paid, but I don't really mind - their choice and v7 stays open source and free.
But

  • it amazes me how they decided to set such high price. It costs as much as big solutions like docker and Rider which have 10-100 times more to offer. Fluent Assertions not only has less to offer - I don't even know what v8 has to offer in comparison to v7 - v8 upgrade page describes v7 changes
  • they've changed the license overnight, in a merge request without description, merged the same day, like they wanted to do this quietly hoping no one would notice. This is really shady and suspicious and is opposite to "open and transparent".
  • they've changed the license after contributions that were made during previous license. Contributors worked on features for the community, hoping to see the release and now they see these changes were made not for community but for some company to make money. And as it turns out - all these changes are still apache 2 licensed, so it looks like v8 doesn't have anything new to offer except the price tag
  • as some pointed out, they have a questionable license too, as well as really vague benefits on the store page, like they didn't really try. And the owner here acts like everything's alright, which doesn't add much clarity to the situation (though I appreciate the clarification on v7 that it will stay like it was, thanks)

If they had announced the license change in next release, in a professional way, so that people could see on what terms they would be contributing to or hoping for beforehand, people wouldn't be as upset.

If they had had anything extra to offer for the new version to justify the price, and if the price was proportionate to the library usefulness - they whole move would be more understandable.

But we have this.

@azygis
Copy link

azygis commented Jan 17, 2025

Finally got an "answer" to my question about backporting changes to v7. In a completely different PR. Not to mention it already reads as pre-written response as it's repeated twice for two different people.

image

Looks like there are two really happy contributors in that discussion.

So yeah, in the end, contributors got technically scammed (however little or many changes were made by the contributors in v8). Now all they can do is contact xceed support, who are obviously very interested in getting these emails. Feels bad for poor folks who contributed for this "release".

@sdepouw
Copy link

sdepouw commented Jan 17, 2025

Wonder how much of a cut the contributors to this open source code are going to get now that their work is going to be sold without their prior consent.

My guess is 0!

It'd be one thing to take what was built here, and produce a new version on their own (i.e. just by those that are going to financially benefit). It's a whole other thing to not only use the same repository / NuGet package (something that should not be allowed, frankly), and instantly change it over to "by the way, you owe us money now."

Scummy behavior. Moq pulled similar nonsense last year, and tons of folks jumped ship. They reverted their changes, but the damage was done.

Same story here! Shouldly seems like a solid alternative, and there's no reason to believe something like this will ever be reverted back (due to contracts likely inked and whatnot).

Remember folks: It's not bad for a developer to see something from a thing they've made. It's about the method in which it's being implemented. Pulling the rug out from under folks. Deliberately (underhandedly) Altering The Deal in the same repository / NuGet package without fanfare. Not compensating anyone else who's contributed to this code, for the buckets of cash they're about to charge. So anyone coming in here going "what they're allowed to make money" need to stop pretending that's all that's going on here.

Thanks for the convenience, FluentAssertions, but terrible decisions like this make it quite easy to drop. As the owner insinuates here, yes indeed, the community no longer trusts you.

@DavidSchuldenfrei
Copy link

Well could we fork from PR 2942, which still has the Apache license, and get all the features of V8, without the cost?

@STeeL835
Copy link

@DavidSchuldenfrei AwesomeAssertions did exactly that

@DavidSchuldenfrei
Copy link

@dennisdoomen, considering that AwesomeAssertions seems to have all the functionality of Fluent Assertions V8, without the cost, why would anyone pay for Fluent Assertions?

@ScarletKuro
Copy link

@dennisdoomen, considering that AwesomeAssertions seems to have all the functionality of Fluent Assertions V8, without the cost, why would anyone pay for Fluent Assertions?

V8 has just been released, and there is not much feedback on it yet. There could be regressions, as is common with new major versions. Any new fixes made by FA cannot be directly backported 1:1 to AwesomeAssertions.

@whymatter
Copy link
Contributor

whymatter commented Jan 17, 2025

Congratulations @dennisdoomen you just killed the best library we had for unit testing. I was literally crying over every other assertions library in other languages since there is just nothing comparable to fluent assertions.

Newer would I ever made my contributions if I had know they end up like this. In the hands of a company that tries to explain how much more value you get from paying for it.

What the you you mean with:

Better Support? The only support I needed came from the community!

New features? The community was responsible of that and doing an extraordinary job!

More Security? What the heck does that even mean?

I am so mad.

@jcfnomada
Copy link

@whymatter please join the AwesomeAssertions project effort, that actually already includes your contribution.

vbreuss added a commit to aweXpect/aweXpect that referenced this pull request Jan 17, 2025
… the license change (#205)

According to the license in fluentassertions/fluentassertions#2943, it is not allowed to "publish results from benchmarks or performance comparison tests (with other products) without advance written permission by Xceed", therefore, fix the version to the latest v7!
@mansellan
Copy link

myCompany.Should().NotBeUsing<FluentAssertions>();
myCompany.Should().BeUsing<Shouldly>();

$130/seat/year for an assertions helper? Nope.

Pinning to v7 across the estate until we can migrate to Shouldly. Apprantly Copilot is pretty helpful for that, and it costs about the same as FA :-)

@azygis
Copy link

azygis commented Jan 17, 2025

Heard good stories in several projects at my company, thousands of tests in half a day. The main issue generally isnIsEquivalentTo but they managed to change that too. And it may come as a shocker, but for that price you get it for anything-backend, anything-fronted and maybe even anything-kitchen if you fancy a meal and get creative with the prompts.

@mansellan
Copy link

mansellan commented Jan 17, 2025

Almost everything in v8 is Apache 2 licensed. That license was in effect until -rc2, with the only changes in the go-live commit being the license change and some trivialities. #2970 (comment)

As noted above, AwesomeAssertions forked from v8.0.0-rc2, as it has every right to do so (IANAL).

I wish AwesomeAssertions every success. This repo, not so much. I am immensely grateful for all the hard work from all contributors, but this move is morally unjustifiable and legally questionable. A real shame, in all senses.

EDIT:

I'm going to update all package imports to [7.0.0] not [7.0.0,8.0.0). Call me paranoid, but at this point I don't trust that the license won't be "back-ported" to 7.x...

@mansellan
Copy link

I did like this comment though :-)

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

Successfully merging this pull request may close these issues.