Another open source project has angered is users and contributor base with a sudden license change in a move that some are characterizing as a betrayal of community trust. The popular open source .NET library, Fluent Assertions, has ignited controversy following a sudden switch to a more restrictive community license with the release of version 8. This shift, which now requires a paid license for commercial use, has left many contributors and users feeling blindsided, likening it to a "rug pull."
The Fluent Assertions package has more than 452 million downloads from NuGet, with an average of 88,000 per day. It was historically released under the permissive Apache 2.0 license and has been a staple for developers writing expressive unit tests. However, its maintainers introduced a new licensing model without prior public discussion, igniting a debate spanning ~250 comments on GitHub in a PR that has received nearly 1,000 downvotes.
“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,” Fluent Assertions maintainer Dennis Doomen said, explaining the license change in the PR. “These updates are governed by the licensing terms specified for this version, which differ from the Apache-licensed versions...I've personally invested almost 15 years of my private time in this project, and I am really happy with this new development.”
A key concern is that Fluent Assertions v8 development began and included contributions from the community under the Apache 2.0 license, with pre-releases distributed under the same terms. Critics argue that transitioning v8 to the new Xceed Community License without explicit contributor consent undermines the original licensing agreement, particularly for features like xUnit 3 support contributed by non-Xceed employees.
The sudden adoption of a restrictive license without prior community consultation has led to accusations of bad faith. Many contributors feel their work, initially intended for open source use, is now being exploited under the guise of sustainability.
“It takes three clicks to find code in the current version that was contributed by someone other than the main authors,” software developer Rouke Broersma commented. “This is against the license terms under which that code was originally contributed. This is not allowed. That is the beginning and end of this part of the argument, and you simply don't need to disagree with it. Disagree with anyone else's arguments about whether or not the new license terms and fees are valid, that's all fine. But please stop arguing that the relicense of existing apache code is no big deal.”
Sticker Shock: Concerns Grow Over the Steep Cost of Fluent Assertions’ Commercial License#
Few would argue against maintainers sustaining their open source work, but the path they took towards relicensing has eroded community trust. Responses to users in the GitHub PR seem to downplay the concerns regarding of the legality of relicensing contributions made under the Apache 2.0 license to one that is incompatible with open source.
Many also object to the high cost of the new commercial license, which is $129.95 per person per year.
“You honestly think someone is going to pay $130 per developer per year for what's essentially syntax sugar for unit test code?” software engineer Chris Bush commented. “Something tells me y'all didn't focus group this decision with the people who actually use the library.”
One GitHub commenter humorously suggested renaming the library to "AffluentAssertions," punctuating concerns about the high cost for large teams and the likelihood of migrating to alternatives.
“I could justify to my department heads a $50 organization license for a helper library that makes testing better,” Bush commented. “If I try to tell them we need to pay upwards of $3,000 a year for a library that makes test assertions pretty, I'll get laughed out of the room.”
Users Are Dropping Fluent Assertions#
Fluent Assertions is hemorrhaging users following the license change. Anytime a project abandons its open source roots, it risks alienating its community, but sliding it in ahead of the next major release after accepting open source contributions has ignited outrage.
Some commenters pointed out that Fluent Assertions’s FAQ suggests that enhanced scalability and security will no longer be prioritized in the free version but are now reserved for the commercial version.
Users are already forking Fluent Assertions and many are migrating away to existing tools. Shouldy, another popular assertion framework, is enthusiastically welcoming an influx of new users.
The Risks of Unknowingly Using Relicensed Code#
Developers are scrambling to address license concerns whether it’s through dropping the library or locking the version.
“I think the way it was rolled out is also one of the main gripes here. It was out of the blue for most people, and there was a lot of confusion over what would be and wouldn’t be compliant,” software engineer Chris Bush commented. “I don’t know about the rest of you but I’m extremely busy, and dealing with surprise licensing issues and communicating those issues to our team and my bosses for relatively minor, non-mission critical parts of our stack was just about the last thing I needed dumped on my plate this week.”
The frustration among developers is palpable, and it’s not just about the license change itself—it’s also about how the change was implemented and communicated. Many users feel blindsided by the sudden rollout and the lack of clarity around compliance, leaving them scrambling to address legal and organizational concerns with little warning.
This sentiment is echoed in the broader criticism of how the changes were packaged and distributed, with developers pointing out the significant risks posed by the decision to retain the same NuGet package ID despite the licensing shift.
“I’m disappointed that this project did not change to a new NuGet package ID with this license change,” Apache Software Foundation member Paul Irwin commented. “Causing commercial users to go out of compliance and putting themselves at legal risk simply by upgrading NuGet packages is some Oracle-esque entrapment.
“NuGet package references in a csproj file do not include any kind of license indication or explicit acceptance. So this seemingly innocuous change in a PR could have legal or financial consequences:"
- <PackageReference Include="FluentAssertions" Version="7.0.0" />
- <PackageReference Include="FluentAssertions" Version="8.0.0" />
Irwin noted that if you edit the csproj manually to bump the version, it does not prompt the user to accept the license or even make them aware of the change.
“This kind of behavior should be prohibited by NuGet.org, and require a new package ID, full stop,” he said.
Users who are uncomfortable with the license change but haven’t yet decided to migrate away can lock their versions.
“To avoid unintentionally upgrading to version 8 of FluentA$$ertion$, you could lock the version explicitly by using a range that prevents automatic upgrades,” software developer Mario Santos commented.
<PackageReference Include="FluentAssertions" Version="[7.0.0,8.0.0)" />
The fallout from Fluent Assertions’ licensing change demonstrates how sudden and poorly-communicated decisions can alienate a community and cause it to fracture when expectations of openness and collaboration are unmet.
Fluent Assertions may face a slow decline in adoption as frustrated users migrate to competitors or forks, weakening its once-dominant position in the .NET ecosystem. Additionally, the decision to relicense code contributed under Apache 2.0 could set a troubling precedent, prompting more scrutiny around the ethics and legality of relicensing practices in open source.