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

Relicense under dual MIT/Apache-2.0 #1473

Closed
kvark opened this issue Jun 4, 2021 · 172 comments · Fixed by #1516
Closed

Relicense under dual MIT/Apache-2.0 #1473

kvark opened this issue Jun 4, 2021 · 172 comments · Fixed by #1516
Labels
area: infrastructure Testing, building, coordinating issues

Comments

@kvark
Copy link
Member

kvark commented Jun 4, 2021

TL;DR the Rust ecosystem is largely Apache-2.0. Being available under that
license is good for interoperation. The MIT license as an add-on can be nice
for GPLv2 projects to use your code.

Why?

The MIT license requires reproducing countless copies of the same copyright
header with different names in the copyright field, for every MIT library in
use. The Apache license does not have this drawback. However, this is not the
primary motivation for me creating these issues. The Apache license also has
protections from patent trolls and an explicit contribution licensing clause.
However, the Apache license is incompatible with GPLv2. This is why Rust is
dual-licensed as MIT/Apache (the "primary" license being Apache, MIT only for
GPLv2 compat), and doing so would be wise for this project. This also makes
this crate suitable for inclusion and unrestricted sharing in the Rust
standard distribution and other projects using dual MIT/Apache, such as my
personal ulterior motive, the Robigalia project.

Some ask, "Does this really apply to binary redistributions? Does MIT really
require reproducing the whole thing?" I'm not a lawyer, and I can't give legal
advice, but some Google Android apps include open source attributions using
this interpretation. Others also agree with
it
.
But, again, the copyright notice redistribution is not the primary motivation
for the dual-licensing. It's stronger protections to licensees and better
interoperation with the wider Rust ecosystem.

How?

To do this, get explicit approval from each contributor of copyrightable work
(as not all contributions qualify for copyright, due to not being a "creative
work", e.g. a typo fix) and then add the following to your README:

## License

Licensed under either of

 * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.

and in your license headers, if you have them, use the following boilerplate
(based on that used in Rust):

// Copyright 2021 wgpu Developers
//
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.

It's commonly asked whether license headers are required. I'm not comfortable
making an official recommendation either way, but the Apache license
recommends it in their appendix on how to use the license.

Be sure to add the relevant LICENSE-{MIT,APACHE} files. You can copy these
from the Rust repo for a plain-text
version.

And don't forget to update the license metadata in your Cargo.toml to:

license = "MIT OR Apache-2.0"

I'll be going through projects which agree to be relicensed and have approval
by the necessary contributors and doing this changes, so feel free to leave
the heavy lifting to me!

Contributor checkoff

To agree to relicensing, comment with :

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option.

Or, if you're a contributor, you can check the box in this repo next to your
name. My scripts will pick this exact phrase up and check your checkbox, but
I'll come through and manually review this issue later as well.

@AndrewGaspar
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

6 similar comments
@Imberflur
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Aaron1011
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Veykril
Copy link
Contributor

Veykril commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@StarArawn
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Gordon-F
Copy link
Contributor

Gordon-F commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Dispersia
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Diggsey
Copy link
Contributor

Diggsey commented Jun 4, 2021

​I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Dy11on
Copy link
Contributor

Dy11on commented Jun 4, 2021 via email

@Pat-Lafon
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

4 similar comments
@DasEtwas
Copy link
Contributor

DasEtwas commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Systemcluster
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Napokue
Copy link
Collaborator

Napokue commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Frizi
Copy link
Contributor

Frizi commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@kvark kvark added the area: infrastructure Testing, building, coordinating issues label Jun 4, 2021
@Atul9
Copy link
Contributor

Atul9 commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

12 similar comments
@HanKruiger
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@OptimisticPeach
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Korijn
Copy link
Contributor

Korijn commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@StygianLightning
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@JCapucho
Copy link
Collaborator

JCapucho commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@ncharlton02
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@98devin
Copy link
Contributor

98devin commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@LPGhatguy
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@OlegOAndreev
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@HalfVoxel
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@FuriouZz
Copy link
Contributor

FuriouZz commented Jun 4, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@MarkSwanson
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@Gordon-F
Copy link
Contributor

Ping:
@Kimundi
@bootra-dev
@chao-mu
@dakom
@danielzgtg
@frbimo
@gzp-crey
@jmitchell89
@m4b
@masonblier
@porky11
@psincf
@skierpage
@terrence2
@zakorgy

@Gordon-F
Copy link
Contributor

Gordon-F commented Jun 17, 2021

@kvark
Copy link
Member Author

kvark commented Jun 17, 2021

Thank you! I removed everyone up to @skierpage , plus m4b

@de-vri-es
Copy link
Contributor

de-vri-es commented Jun 17, 2021

Maybe contributors with 0 PR's related to nickname changes, I don't know.

Could also be commits they (co)-authored but that were submitted in a PR by someone else. Might be good to also run a git blame to get more details about authors of the current code.

@Gordon-F
Copy link
Contributor

@de-vri-es Any suggestions how we can connect commiter name\email with GitHub nickname?

@de-vri-es
Copy link
Contributor

de-vri-es commented Jun 17, 2021

I'm cloning some repos with commits by each user excluded so far to find their email. I'll show my finding here when it's complete :)

Though I'll probably redact the emails, or use names. Shouldn't make it too easy on spam bots.

@de-vri-es
Copy link
Contributor

de-vri-es commented Jun 17, 2021

Summary

After running git blame on the master branch, it looks like dakomer still has a little bit left in the CI files, which may not be a problem. masonblier still has a sizeable chunk of code in examples on the master branch with commit 76076d3. Worst case, those examples could be excluded from the license change.

I could not find any remaining contributions for the others in the list up to and including skierpage.

Details:

chao-mu

for file in $(git ls-tree -r HEAD --name-only); do git blame "$file" | grep -i 'chao'; done

(no hits, also search on email with git blame -e)

dakomer

for file in $(git ls-tree -r HEAD --name-only); do git blame  "$file" | grep -i 'David'; done
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300  1) name: Documentation
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300  2) 
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300  3) on:
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300  4)   push:
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300  7) 
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300  8) jobs:
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 10)     runs-on: ubuntu-latest
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 12)     steps:
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 17) 
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 37) 
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 39)         uses: JamesIves/github-pages-deploy-action@releases/v3
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 40)         with:
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 42)           FOLDER: target/doc
ac7b1a72 (David Komer       2020-06-18 18:50:21 +0300 45)           TARGET_FOLDER: doc 

gzp-crey

for file in $(git ls-tree -r HEAD --name-only); do git blame  "$file" | grep -i 'gzp'; done

(no hits, also used email address with git blame -e)

jmitchell89

for file in $(git ls-tree -r HEAD --name-only); do git blame  "$file" | grep -i 'John Mitchell'; done

(no hits, also used email address with git blame -e)

masonblier

for file in $(git ls-tree -r HEAD --name-only); do git blame "$file" | grep -i 'mason'; done
76076d31 (Mason                2019-12-27 22:05:36 -0800   1) // Flocking boids example with gpu compute update pass
76076d31 (Mason                2019-12-27 22:05:36 -0800   2) // adapted from https://github.com/austinEng/webgpu-samples/blob/master/src/examples/computeBoids.ts
76076d31 (Mason                2019-12-27 22:05:36 -0800   3) 
76076d31 (Mason                2019-12-27 22:05:36 -0800   8) #[path = "../framework.rs"]
76076d31 (Mason                2019-12-27 22:05:36 -0800   9) mod framework;
76076d31 (Mason                2019-12-27 22:05:36 -0800  10) 
76076d31 (Mason                2019-12-27 22:05:36 -0800  11) // number of boid particles to simulate
76076d31 (Mason                2019-12-27 22:05:36 -0800  12) 
76076d31 (Mason                2019-12-27 22:05:36 -0800  13) const NUM_PARTICLES: u32 = 1500;
76076d31 (Mason                2019-12-27 22:05:36 -0800  14) 
76076d31 (Mason                2019-12-27 22:05:36 -0800  15) // number of single-particle calculations (invocations) in each gpu work group
76076d31 (Mason                2019-12-27 22:05:36 -0800  16) 
76076d31 (Mason                2019-12-27 22:05:36 -0800  17) const PARTICLES_PER_GROUP: u32 = 64;
76076d31 (Mason                2019-12-27 22:05:36 -0800  18) 
76076d31 (Mason                2019-12-27 22:05:36 -0800  19) /// Example struct holds references to wgpu resources and frame persistent data
76076d31 (Mason                2019-12-27 22:05:36 -0800  20) struct Example {
76076d31 (Mason                2019-12-27 22:05:36 -0800  21)     particle_bind_groups: Vec<wgpu::BindGroup>,
76076d31 (Mason                2019-12-27 22:05:36 -0800  22)     particle_buffers: Vec<wgpu::Buffer>,
76076d31 (Mason                2019-12-27 22:05:36 -0800  23)     vertices_buffer: wgpu::Buffer,
76076d31 (Mason                2019-12-27 22:05:36 -0800  24)     compute_pipeline: wgpu::ComputePipeline,
76076d31 (Mason                2019-12-27 22:05:36 -0800  25)     render_pipeline: wgpu::RenderPipeline,
76076d31 (Mason                2019-12-27 22:05:36 -0800  26)     work_group_count: u32,
76076d31 (Mason                2019-12-27 22:05:36 -0800  27)     frame_num: usize,
76076d31 (Mason                2019-12-27 22:05:36 -0800  28) }
76076d31 (Mason                2019-12-27 22:05:36 -0800  29) 
76076d31 (Mason                2019-12-27 22:05:36 -0800  30) impl framework::Example for Example {
76076d31 (Mason                2019-12-27 22:05:36 -0800  31)     /// constructs initial instance of Example struct
76076d31 (Mason                2019-12-27 22:05:36 -0800  32)     fn init(
76076d31 (Mason                2019-12-27 22:05:36 -0800  33)         sc_desc: &wgpu::SwapChainDescriptor,
76076d31 (Mason                2019-12-27 22:05:36 -0800  35)         device: &wgpu::Device,
76076d31 (Mason                2019-12-27 22:05:36 -0800  56) 
76076d31 (Mason                2019-12-27 22:05:36 -0800  75)         // create compute bind layout group and compute pipeline layout
76076d31 (Mason                2019-12-27 22:05:36 -0800  76) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 121) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 122)         // create render pipeline with empty bind group layout
76076d31 (Mason                2019-12-27 22:05:36 -0800 123) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 130) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 131)         let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
76076d31 (Mason                2019-12-27 22:05:36 -0800 158)         });
76076d31 (Mason                2019-12-27 22:05:36 -0800 159) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 160)         // create compute pipeline
76076d31 (Mason                2019-12-27 22:05:36 -0800 161) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 162)         let compute_pipeline = device.create_compute_pipeline(&wgpu::ComputePipelineDescriptor {
76076d31 (Mason                2019-12-27 22:05:36 -0800 167)         });
76076d31 (Mason                2019-12-27 22:05:36 -0800 168) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 169)         // buffer for the three 2d triangle vertices of each instance
76076d31 (Mason                2019-12-27 22:05:36 -0800 170) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 171)         let vertex_buffer_data = [-0.01f32, -0.02, 0.01, -0.02, 0.00, 0.02];
76076d31 (Mason                2019-12-27 22:05:36 -0800 177) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 178)         // buffer for all particles data of type [(posx,posy,velx,vely),...]
76076d31 (Mason                2019-12-27 22:05:36 -0800 179) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 180)         let mut initial_particle_data = vec![0.0f32; (4 * NUM_PARTICLES) as usize];
76076d31 (Mason                2019-12-27 22:05:36 -0800 183)         for particle_instance_chunk in initial_particle_data.chunks_mut(4) {
76076d31 (Mason                2019-12-27 22:05:36 -0800 188)         }
76076d31 (Mason                2019-12-27 22:05:36 -0800 189) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 190)         // creates two buffers of particle data each of size NUM_PARTICLES
76076d31 (Mason                2019-12-27 22:05:36 -0800 191)         // the two buffers alternate as dst and src for each frame
76076d31 (Mason                2019-12-27 22:05:36 -0800 192) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 193)         let mut particle_buffers = Vec::<wgpu::Buffer>::new();
76076d31 (Mason                2019-12-27 22:05:36 -0800 194)         let mut particle_bind_groups = Vec::<wgpu::BindGroup>::new();
76076d31 (Mason                2019-12-27 22:05:36 -0800 205)         }
76076d31 (Mason                2019-12-27 22:05:36 -0800 206) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 207)         // create two bind groups, one for each buffer as the src
76076d31 (Mason                2019-12-27 22:05:36 -0800 208)         // where the alternate buffer is used as the dst
76076d31 (Mason                2019-12-27 22:05:36 -0800 209) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 210)         for i in 0..2 {
76076d31 (Mason                2019-12-27 22:05:36 -0800 229)         }
76076d31 (Mason                2019-12-27 22:05:36 -0800 230) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 231)         // calculates number of work groups from PARTICLES_PER_GROUP constant
76076d31 (Mason                2019-12-27 22:05:36 -0800 234) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 235)         // returns Example struct and No encoder commands
76076d31 (Mason                2019-12-27 22:05:36 -0800 236) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 246)     }
76076d31 (Mason                2019-12-27 22:05:36 -0800 247) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 248)     /// update is called for any WindowEvent not handled by the framework
76076d31 (Mason                2019-12-27 22:05:36 -0800 249)     fn update(&mut self, _event: winit::event::WindowEvent) {
76076d31 (Mason                2019-12-27 22:05:36 -0800 250)         //empty
76076d31 (Mason                2019-12-27 22:05:36 -0800 251)     }
76076d31 (Mason                2019-12-27 22:05:36 -0800 252) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 253)     /// resize is called on WindowEvent::Resized events
76076d31 (Mason                2019-12-27 22:05:36 -0800 254)     fn resize(
76076d31 (Mason                2019-12-27 22:05:36 -0800 255)         &mut self,
76076d31 (Mason                2019-12-27 22:05:36 -0800 256)         _sc_desc: &wgpu::SwapChainDescriptor,
76076d31 (Mason                2019-12-27 22:05:36 -0800 257)         _device: &wgpu::Device,
76076d31 (Mason                2019-12-27 22:05:36 -0800 261)     }
76076d31 (Mason                2019-12-27 22:05:36 -0800 262) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 263)     /// render is called each frame, dispatching compute groups proportional
76076d31 (Mason                2019-12-27 22:05:36 -0800 264)     ///   a TriangleList draw call for all NUM_PARTICLES at 3 vertices each
76076d31 (Mason                2019-12-27 22:05:36 -0800 265)     fn render(
76076d31 (Mason                2019-12-27 22:05:36 -0800 266)         &mut self,
76076d31 (Mason                2019-12-27 22:05:36 -0800 268)         device: &wgpu::Device,
76076d31 (Mason                2019-12-27 22:05:36 -0800 281)         let render_pass_descriptor = wgpu::RenderPassDescriptor {
76076d31 (Mason                2019-12-27 22:05:36 -0800 284)             depth_stencil_attachment: None,
76076d31 (Mason                2019-12-27 22:05:36 -0800 285)         };
76076d31 (Mason                2019-12-27 22:05:36 -0800 286) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 287)         // get command encoder
76076d31 (Mason                2019-12-27 22:05:36 -0800 288)         let mut command_encoder =
76076d31 (Mason                2019-12-27 22:05:36 -0800 292)         {
76076d31 (Mason                2019-12-27 22:05:36 -0800 293)             // compute pass
76076d31 (Mason                2019-12-27 22:05:36 -0800 296)             cpass.set_pipeline(&self.compute_pipeline);
76076d31 (Mason                2019-12-27 22:05:36 -0800 297)             cpass.set_bind_group(0, &self.particle_bind_groups[self.frame_num % 2], &[]);
76076d31 (Mason                2019-12-27 22:05:36 -0800 298)             cpass.dispatch(self.work_group_count, 1, 1);
76076d31 (Mason                2019-12-27 22:05:36 -0800 299)         }
76076d31 (Mason                2019-12-27 22:05:36 -0800 301) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 303)         {
76076d31 (Mason                2019-12-27 22:05:36 -0800 304)             // render pass
76076d31 (Mason                2019-12-27 22:05:36 -0800 305)             let mut rpass = command_encoder.begin_render_pass(&render_pass_descriptor);
76076d31 (Mason                2019-12-27 22:05:36 -0800 306)             rpass.set_pipeline(&self.render_pipeline);
76076d31 (Mason                2019-12-27 22:05:36 -0800 311)             rpass.draw(0..3, 0..NUM_PARTICLES);
76076d31 (Mason                2019-12-27 22:05:36 -0800 312)         }
76076d31 (Mason                2019-12-27 22:05:36 -0800 314) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 315)         // update frame count
76076d31 (Mason                2019-12-27 22:05:36 -0800 316)         self.frame_num += 1;
76076d31 (Mason                2019-12-27 22:05:36 -0800 317) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 318)         // done
76076d31 (Mason                2019-12-27 22:05:36 -0800 320)     }
76076d31 (Mason                2019-12-27 22:05:36 -0800 321) }
76076d31 (Mason                2019-12-27 22:05:36 -0800 322) 
76076d31 (Mason                2019-12-27 22:05:36 -0800 323) /// run example
76076d31 (Mason                2019-12-27 22:05:36 -0800 324) fn main() {
76076d31 (Mason                2019-12-27 22:05:36 -0800 325)     framework::run::<Example>("boids");
76076d31 (Mason                2019-12-27 22:05:36 -0800 326) }

bootra-dev
Couldn't actually find a commit of them anymore outside of the github web-interface to get an email address from.
However, I did run a git blame searching for each of their commits, and it appears no code remains in the current main branch.

danielzgtg

for file in $(git ls-tree -r HEAD --name-only); do git blame "$file" | grep -i 'Daniel'; done

(no hits, also used email address with git blame -e)

skierpage

for file in $(git ls-tree -r HEAD --name-only); do git blame "$file" | grep -i 'skier'; done

(no hits, also used email address with git blame -e)

@de-vri-es
Copy link
Contributor

de-vri-es commented Jun 17, 2021

Correction for chao-mu:

They still have a lot of hits due to changing formatting rules and running cargo-fmt in commit a6e81dc. I would expect that is not a problem for a license change though.

 for file in $(git ls-tree -r HEAD --name-only); do git blame "$file" | grep -i 'Hackpoetic'; done 
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400  77)         let compute_bind_group_layout =
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400  78)             device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400  99)                         },
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 109)                         },
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 113)                 label: None,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 114)             });
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 115)         let compute_pipeline_layout =
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 116)             device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 120)             });
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 124)         let render_pipeline_layout =
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 125)             device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 129)             });
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 211)             particle_bind_groups.push(device.create_bind_group(&wgpu::BindGroupDescriptor {
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 212)                 layout: &compute_bind_group_layout,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 215)                         binding: 0,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 217)                     },
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 219)                         binding: 1,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 221)                     },
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 223)                         binding: 2,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 225)                     },
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 227)                 label: None,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 228)             }));
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 232)         let work_group_count =
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 233)             ((NUM_PARTICLES as f32) / (PARTICLES_PER_GROUP as f32)).ceil() as u32;
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400  36)     let (device, queue) = adapter
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400  42)             },
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400  69)     (0..size * size)
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 380)             rpass.draw_indexed(0..self.index_count as u32, 0, 0..1);
a6e81dc7 (Hackpoetic        2020-04-10 22:52:59 -0400 280)             },
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400  46)     let (device, queue) = adapter
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400  52)             },
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 127)     let mut encoder =
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 128)         device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 198)     fn test_compute_1() {
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 199)         let input = vec![1, 2, 3, 4];
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 204)     fn test_compute_2() {
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 205)         let input = vec![5, 23, 10, 9];
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 225)         for _ in 0..thread_count {
a6e81dc7 examples/hello-compute/main.rs (Hackpoetic              2020-04-10 22:52:59 -0400 234)         for _ in 0..thread_count {
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400   5)     window::Window,
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400  22)     let (device, queue) = adapter
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400  28)             },
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400  85)             Event::WindowEvent {
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400  86)                 event: WindowEvent::Resized(size),
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400  87)                 ..
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400  88)             } => {
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400  99)                 let mut encoder =
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400 100)                     device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
a6e81dc7 examples/hello-triangle/main.rs (Hackpoetic           2020-04-10 22:52:59 -0400 115)                     rpass.draw(0..3, 0..1);
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400  15)     (0..size * size)
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 122)         let views = (0..mip_count)
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 137)         for target_mip in 1..mip_count as usize {
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 177)             rpass.draw(0..4, 0..1);
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 480)             rpass.draw(0..4, 0..1);
a6e81dc7 examples/msaa-line/main.rs     (Hackpoetic           2020-04-10 22:52:59 -0400 152)         for i in 0..max {
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 385)         let mut shadow_target_views = (0..2)
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 409)                 depth: 1.0..20.0,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 421)                 depth: 1.0..20.0,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 820)                 pass.draw_indexed(0..entity.index_count as u32, 0, 0..1);
a6e81dc7 src/backend/native_gpu_future.rs (Hackpoetic        2020-04-10 22:52:59 -0400  1) use parking_lot::Mutex;
a6e81dc7 src/backend/native_gpu_future.rs (Hackpoetic        2020-04-10 22:52:59 -0400 27) impl<T> Future for GpuFuture<T> {
a6e81dc7 src/backend/native_gpu_future.rs (Hackpoetic        2020-04-10 22:52:59 -0400 54)             }
a6e81dc7 src/backend/native_gpu_future.rs (Hackpoetic        2020-04-10 22:52:59 -0400 64)             data: Arc::from_raw(this as _),
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 1885)     ///
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 1889)     ///
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 1893)         &self,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 2623)     pub fn dispatch_indirect(
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 2624)         &mut self,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 2625)         indirect_buffer: &'a Buffer,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 2626)         indirect_offset: BufferAddress,
a6e81dc7 (Hackpoetic           2020-04-10 22:52:59 -0400 2627)     ) {

@kvark
Copy link
Member Author

kvark commented Jun 17, 2021

thank you! So I removed @skierpage and re-added @masonblier

@Gordon-F
Copy link
Contributor

I forgot to ping @andykilroy!

@terrence2
Copy link
Contributor

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to chose either at their option.

@frbimo
Copy link
Contributor

frbimo commented Jun 18, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option.

@gzp79
Copy link
Contributor

gzp79 commented Jun 18, 2021

From my side any liberate license is ok for past and future :)
"I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option."

bors bot added a commit that referenced this issue Jun 18, 2021
1516: Relicense to MIT/Apache r=kvark a=cwfitzgerald

**Connections**

Closes #1440 #1473

**Description**

Relicenses all of the project to MIT/Apache. Thank you to all 142 people who replied on the issue!


Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
@bors bors bot closed this as completed in #1516 Jun 18, 2021
@kvark kvark unpinned this issue Jun 18, 2021
@psincf
Copy link
Contributor

psincf commented Jun 20, 2021

...
I license past contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option.

@chao-mu
Copy link
Contributor

chao-mu commented Jun 28, 2021 via email

@porky11
Copy link
Contributor

porky11 commented Jul 19, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option.

And I'd also like to agree to all future license changes, since I'm not that active at GitHub and that I saw this was a coincidence.

@zakorgy
Copy link

zakorgy commented Aug 17, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option.

1 similar comment
@Kimundi
Copy link
Contributor

Kimundi commented Oct 1, 2021

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option.

@psincf
Copy link
Contributor

psincf commented Mar 9, 2022

When this repository got re-licensed, i felt bad for not having waited my approval.
I am not a lawyer, but I felt this was not authorized with MPL2, due to its copyleft (at file level), and this is something important for me.
I actually always wanted something other than MPL2, and I am satisfied with the MIT/APACHE 2 choice, but I just didn't appreciate the merge of the commit re-licensing the repository without waiting my full consent, and I needed to express my feeling about this.

@dakom
Copy link
Contributor

dakom commented Mar 9, 2022

I license past and future contributions under the dual MIT/Apache-2.0 license, allowing licensees to choose either at their option.

Patryk27 pushed a commit to Patryk27/wgpu that referenced this issue Nov 23, 2022
* Add FindLsb / FindMsb

* Fixes and tests for FindLsb/FindMsb

* Add findLsb / findMsb as WGSL builtins

* Fix tests

* Fix incompatible type issue with MSL output

* Requested changes

* Test fewer cases of findLsb/findMsb
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: infrastructure Testing, building, coordinating issues
Projects
None yet
Development

Successfully merging a pull request may close this issue.