In the Rust community, a dual license under MIT/Apache 2.0 is common, and Rust itself is so.
A typical example is Bevy, which was initially MIT licensed, but they worked hard to relicense it.
The reason why the dual-license is reasonable is discussed in bevyengine/bevy#2373, and it says:
- The MIT license (arguably) requires binaries to reproduce countless copies of the same license boilerplate for every MIT library in use. MIT-only engines like Godot have complicated license compliance rules as a result
- The Apache-2.0 license has protections from patent trolls and an explicit contribution licensing clause.
- The Rust ecosystem is largely Apache-2.0. Being available under that license is good for interoperation and opens the doors to upstreaming Bevy code into other projects (Rust, the async ecosystem, etc).
- The Apache license is incompatible with GPLv2, but MIT is compatible.