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

Pick a license #45

Closed
brson opened this issue Aug 11, 2012 · 20 comments
Closed

Pick a license #45

brson opened this issue Aug 11, 2012 · 20 comments
Assignees
Labels

Comments

@brson
Copy link
Contributor

@brson brson commented Aug 11, 2012

Servo still does not claim to be distributed under any license. There are probably only two options, MIT (the Rust license) and MPL.

We do have an OFL licensed font in the repo.

@brson
Copy link
Contributor Author

@brson brson commented Aug 11, 2012

There's a lot of cross-pollination between rust and servo so probably MIT everywhere is easiest.

@BrendanEich
Copy link

@BrendanEich BrendanEich commented Aug 11, 2012

Let's not do this without consultation. We would prefer a license with a patent clause that we know works with prospective partners. I'll start a mail thread.

/be

@kripken
Copy link

@kripken kripken commented Aug 11, 2012

There could be a big benefit to using the MIT license as this would be the only browser available under a permissive license (WebKit is LGPL, Gecko is MPL, others proprietary). Even without debating the benefits of permissive licensing, there is a benefit to having different licensing than existing browsers to fill a different need and attract new users.

@BrendanEich
Copy link

@BrendanEich BrendanEich commented Aug 11, 2012

MPL is weak copyleft, file-wise only. This has not been an impediment in practice, and it has helped notably in some cases where we'd lose valuable work to private forks. MPL2 simplifies the MPL and fixes license interop. There's possibly some patent magic words in ASL2 that make it more desirable to some commercial outfits, but we're working on this.

I do not see either "license differentiation" or "uniform permissiveness" as goods. The license is a tool, a means to an end. One end could be widest possible use (including fragmentation into private/commercial forks). Another could be give-back by file a la MPL. Another would be having the right patent words. We should choose deliberately and not just go for MIT to be same as Rust, or to be more permissive than other engines -- including Gecko, which is permissive enough in practice.

/be

@apotheon
Copy link

@apotheon apotheon commented Nov 1, 2012

I agree with kripken, and would in fact be hesitant to use even a layout engine distributed under a "weakly" copyleft license like the MPL in any of my projects, to say nothing of compatibility problems between copyleft licenses. I do not find Gecko "permissive enough in practice", and many others feel the same way.

I think the MIT/X11 License is an excellent choice.

@bstrie
Copy link
Contributor

@bstrie bstrie commented Nov 2, 2012

@apotheon Rust itself is planning to move from MIT to Apache License v2, due to the issue of protection from patents. Presumably that's now the other major contender for Servo's license, alongside MPL2. I'd also be interested to hear why you'd be hesitant to include weakly-copyleft code in any of your projects; MPL2 is (afaict) specifically designed to be used with proprietary projects, with its file-level licensing allowing it to be easily embedded and used alongside closed-source files as long as you make available any changes to the licensed files themselves.

@BrendanEich
Copy link

@BrendanEich BrendanEich commented Nov 2, 2012

Also, MPL2 is compatible with GPL/LGPL, so I would like to hear of concrete problems of the "to say nothing of compatibility problems between copyleft licenses" kind.

/be

@BrendanEich
Copy link

@BrendanEich BrendanEich commented Nov 3, 2012

@apotheon My last comment was for you -- MPL2 is compatible with GPL/LGPL, so is your objection simply to copyleft of any strength? If so, ASL2 is the front-runner as @bstrie notes. But if so, I'd like to hear more about why MPL2's weak copyleft is objectionable. Thanks,

/be

@apotheon
Copy link

@apotheon apotheon commented Nov 6, 2012

The Apache License 2.0 is a pretty crummy license in general, and is not as permissive as people like to think. Apart from just general complexity, it also suffers from bookkeeping and project organization clauses, though I don't mind patent clauses at all. The only actually copyfree license I know that comes with a patent grant is the COIL, which is not the most widely used license in the world, though I'd use it if someone insisted on a patent clause just to avoid the restrictiveness of the ASL2.

I'm hesitant to use weakly copyleft licensed code in any of my projects mostly because of the increased compliance overhead involved in dealing with those licenses, the limitations it might impose on the more widespread use and distribution of my project because other people might avoid a partially copyleft project, and the general issues with license complexity that apply to all the popular copyleft licenses. I strictly stick to copyfree licenses for my own code, and copyleft licenses can make things difficult if I want to actually extend someone else's code when combining it with a project of mine (and I dislike throwing code into the black hole of copyleft licensing anyway). My dislike for copyleft licenses -- weak or strong -- has nothing to do with any desire to use others' code in commercial proprietary projects; I try to avoid contributing code to them, too, except on the rare occasion someone pays me a premium for transfer of copyright on contract work (and part of the reason for the premium they have to pay is that I prefer to discourage clients from keeping code I write closed).

As for the question about compatibility between copyleft licenses, the fact the MPL is friendly with the GPL is a matter of a specific exception being made. The MPL is not compatible with other copyleft licenses besides those maintained by GNU/FSF.

edit: license name superseded

@apotheon
Copy link

@apotheon apotheon commented Nov 13, 2012

I also hear that the likely plan for Rust is not switching to AL2, but dual-licensing MIT/X11 + AL2 -- which isn't a bad idea, if you feel like you absolutely must have the Apache License 2.0 for some reason. If contributors are required to disjunctively dual license contributions that way, you get both the patent clause and the copyfree licensing option for downstream users.

@brson
Copy link
Contributor Author

@brson brson commented Dec 4, 2012

Rust relicensing is mostly complete, so it's time to start getting Servo sorted out.

Here is the minimum I intend to do:

  • Add a LICENSE file to the main servo repo (likely MPL2)
  • Come up with a standard license block, similar to Rust's, and put it on each file in the main servo repo

As far as sub-repos this is what I plan:

Classify each repo Servo uses as either servo-oriented, rust-oriented, or 3rd-party-oriented. servo projects (currently servo, servo-gfx at least) will use the Servo license, Rust projects will use the Rust license, 3rd-party projects and their bindings will use their own license. Currently there are 29 sub-repositories and most are bindings that I would classify as 3rd-party.

Servo projects will be set up like Servo, Rusty projects like Rust. Bindings to external libraries I will add a LICENSE file with the original library license, though I expect my licensing vigilance to wane the further I get away from core Servo code.

We've discussed adding an exception to Servo's license to allow code to be relicensed in the event it gets included in Rust, but if everybody agrees to license Rust projects and Servo projects differently then maybe we don't need those exceptions. We can be forward-thinking and do our prototyping of standard library features in subrepos that already carry the right license. Also, all Servo code is still written by MoCo employees and that will probably remain true for the next year at least. I think I prefer to avoid tacking on our own language to the license (though I made a big deal about it earlier).

For the heck of it, here is how I would classify (and license) our current subrepos:

3rd-party (other license)

src/libcss (remotes/mozilla-servo/master)
src/libhubbub (heads/master)
src/libparserutils (heads/master)
src/libwapcaplet (heads/master)
src/mozjs (heads/master)
src/rust-azure (remotes/origin/HEAD)
src/rust-cairo (remotes/origin/HEAD)
src/rust-fontconfig (remotes/origin/HEAD)
src/rust-freetype (remotes/origin/HEAD)
src/rust-harfbuzz (heads/master)
src/rust-http-client (remotes/origin/HEAD)
src/rust-hubbub (heads/master)
src/rust-mozjs (remotes/origin/HEAD)
src/rust-netsurfcss (remotes/mozilla-servo/master)
src/rust-stb-image (remotes/origin/HEAD)
src/rust-wapcaplet (remotes/origin/HEAD)
src/rust-xlib (remotes/origin/HEAD)
src/skia (remotes/origin/master)

Rust (MIT/ASL2) license

src/rust-cocoa (remotes/origin/HEAD)
src/rust-core-foundation (remotes/origin/HEAD)
src/rust-core-graphics (remotes/origin/HEAD)
src/rust-core-text (remotes/origin/HEAD)
src/rust-geom (remotes/origin/HEAD)
src/rust-glut (remotes/origin/HEAD)
src/rust-io-surface (remotes/origin/HEAD)
src/rust-layers (heads/master-3-geb86bb0)
src/rust-opengles (remotes/origin/HEAD)
src/sharegl (remotes/origin/HEAD)

Servo license

src/rust-css (remotes/origin/HEAD)

The only one I might prefer the Servo license for is rust-css. This is a generic library for parsing and selector matching. It is currently a wrapper around libcss, but it is intended to be rewritten completely in Rust someday.

@apotheon
Copy link

@apotheon apotheon commented Dec 7, 2012

Why MPL, exactly?

@ghost ghost assigned brson Jan 18, 2013
@steveklabnik
Copy link
Contributor

@steveklabnik steveklabnik commented Mar 31, 2013

Has any progress been made on this front? I'm curious.

@brson
Copy link
Contributor Author

@brson brson commented Mar 31, 2013

@steveklabnik No progress.

@mindcrime
Copy link

@mindcrime mindcrime commented Apr 3, 2013

I'd love to see Servo go with a license that's A. OSI approved, B. reasonably well known and widely adopted, so that it's implications are well understood, and C. fairly permissive. IMO, the ASLv2 would be a pretty good choice, as would the new BSD license, or the MIT license.

The MPL isn't bad per-se, but I feel like it's a license that not a lot of people understand really well, so I would not put it real high on the list personally.

Anyway, anything but the CPAL, or the AGPL or some obscure license that's only used by like 2 other projects in the world... :-)

@timkuijsten
Copy link

@timkuijsten timkuijsten commented Apr 3, 2013

+1 for extra overhead when including work with more complex licenses than MIT/BSD like apotheon mentions.

It's often a one-way road when including work with a less permissive license which can feel a bit unfair and is often explained in the media "the wrong way" (like "Apache OpenOffice (AL2) won't allow inclusion of LibreOffice code (LGPLv3)").

In light of Mozilla's "Doing good is part of our code" I would suggest the shortest, simplest and most permissive license possible, that will add the least (no) overhead to those that include this code.

@apotheon Never heard of this Tesla or COIL license before but it looks really interesting as a MIT alternative with patent clause.

From https://www.wikivs.com/wiki/Apache_License_vs_COIL#Comparison:

The intended applicability of the AL2 is manifest in its specific reference to "software source code, documentation source, and configuration files" as well as "compiled object code" in its Definitions section, in addition to reference throughout the license text to the words "Source" and "Object" in whose definitions such phrases appear. This specificity of applicability to software projects and to related materials (software documentation and configuration files) may prove problematic in establishing grant of license for use of part or all of the covered work within derivative, non-software works.

By contrast, the COIL contains no text establishing such specificity of application to particular types of copyrightable work, making it likely suitable for works of significantly greater range and variation.

@brson
Copy link
Contributor Author

@brson brson commented Apr 4, 2013

I've started on this.

In all servo repositories that are not simply forks of an upstream project I have done one of two things:

In some projects I've added a LICENSE file containing the text of the MPL2. The main repository, rust-azure, rust-cairo, rust-css, rust-mozjs are licensed this way, either because their upstreams are MPL or because they are core parts of servo.

To the remaining repositories without preexisting licenses I've added a COPYING file containing the following text.

Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
<LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
option. All files in the project carrying such notice may not be
copied, modified, or distributed except according to those terms.

Plus the LICENSE-APACHE and LICENSE-MIT files. This is the same licensing as Rust.

Next I'll contact non-moco contributors to all repos and get them to send me an email explicitly licensing their code under the relevant terms. Then I will add a tidy script to our build process that verifies that all source files have the proper header, then add all the missing headers.

@apotheon
Copy link

@apotheon apotheon commented Apr 17, 2013

So . . . dual-licensed MIT/X11 License and Apache License 2.0. I find this encouraging (mostly because of the MIT/X11 License option). Thanks for your efforts, brson.

@brson
Copy link
Contributor Author

@brson brson commented Apr 17, 2013

@apotheon Only some parts of servo are MIT/APL2. The engine itself, the code in the main repo is MPL2.

@apotheon
Copy link

@apotheon apotheon commented Apr 17, 2013

Oh, crap. Well . . . good luck, I guess. I'll have to find what I need elsewhere.

@jdm jdm closed this Aug 3, 2013
ChrisParis pushed a commit to ChrisParis/servo that referenced this issue Sep 7, 2014
Add some tests for the named property getter on the document object.
mbrubeck pushed a commit to mbrubeck/servo that referenced this issue May 11, 2015
Migrate apk-builder from old_io to new io
glennw pushed a commit to glennw/servo that referenced this issue Jan 16, 2017
Implement copyTexImage2D, copyTexSubImage2D and texSubImage2D

Implement copyTexImage2D, copyTexSubImage2D and texSubImage2D and add rules to the `.gitignore` for vim users. Let me know if I missed anything!

Blocked by: servo/gleam#80

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/webrender_traits/45)
<!-- Reviewable:end -->
pmocher pushed a commit to Brody-Eastwood/servo that referenced this issue Mar 30, 2018
# This is the 1st commit message:

Don't access the reflector when dropping a Promise (fixes servo#18651)

The reflector may be dead already.

# This is the commit message servo#2:

Run automated test for memory report charter.
# This is the commit message servo#3:

Run memory charting test on CI.
# This is the commit message servo#4:

Move the TravisCI test to the quick group.
# This is the commit message servo#5:

Add timeout pref to the mozilla/worklets wpt tests

# This is the commit message servo#6:

Added .ini for test_paint_worklet_timeout.html

# This is the commit message servo#7:

Update the in-tree status of WPT syncing.

# This is the commit message servo#8:

refactor(window): reference winit where applicable

- relates with servo#20299

# This is the commit message servo#9:

Update mozangle to 0.1.6.

# This is the commit message servo#10:

Update to handle WebRender API changes

Items now only take a clipping rectangle instead of a LocalClip.

# This is the commit message servo#11:

Update WR (local clip API change, texture cache optimizations).

# This is the commit message servo#12:

Update the MULTIPROCESS static when changing default options

# This is the commit message servo#13:

Add Windows support to the --nightly | -n flag.

# This is the commit message servo#14:

build(cargo): enable webrender capture feature

# This is the commit message servo#15:

feat(windowevent): expose CaptureWebRender event

# This is the commit message servo#16:

feat(window): bind hotkey to trigger capture event

# This is the commit message servo#17:

Avoid using WPT test runner to update the test manifest.

# This is the commit message servo#18:

Use typed coordinates.

We use Size2D and Point2D across compositing, constellation and script,
losing the type of pixels we use (DevicePixel, DeviceIndepententPixel
or CSSPixel) along the way, which might lead to bugs like
window.outerHeight not taking into account the page zoom (using
DeviceIndepententPixel instead of CSSPixel).

# This is the commit message servo#19:

alias some euclid types

# This is the commit message servo#20:

remove WindowMethods::size()

# This is the commit message servo#21:

Remove update-manifest argument that is no longer valid.
# This is the commit message servo#22:

Update web-platform-tests to revision e87f38097902e16348d4e17f4fe3bc2d0112bff1

# This is the commit message servo#23:

Add icon to servo.exe

# This is the commit message servo#24:

Use mozjs 0.3 fork without Heap::new

# This is the commit message servo#25:

Root JS object members in dictionaries

# This is the commit message servo#26:

Root `any` members in dictionaries

# This is the commit message servo#27:

Add key/value iterable HTML benchmark

# This is the commit message servo#28:

Fix tabs

# This is the commit message servo#29:

Use upstream mozjs 0.3

# This is the commit message servo#30:

Update WR (radial gradient optimizations).

# This is the commit message servo#31:

CounterBound::Integer made to store an Integer

# This is the commit message servo#32:

style: Remove unsound Atom From implementations.

Fixes servo#20158

# This is the commit message servo#33:

style: Cleanup @-moz-document parsing a bit.

MozReview-Commit-ID: 7vd0BLAqM0v
Bug: 1446470
Reviewed-by: xidorn

# This is the commit message servo#34:

style: Allow @-moz-document url-prefix() on content.

MozReview-Commit-ID: zaT41fpsDT
Bug: 1446470
Reviewed-by: xidorn

# This is the commit message servo#35:

style: Add another pref to control the url-prefix hack.

MozReview-Commit-ID: D4qL0oO69Uh
Bug: 1446470
Reviewed-by: xidorn

# This is the commit message servo#36:

style: Update bindings.

# This is the commit message servo#37:

Update web-platform-tests to revision 790e6601ee8b4b412b6ad9f6fde466b7ccb9cb7e

# This is the commit message servo#38:

style: Better Shadow DOM assertions.

Bug: 1445682
Reviewed-by: xidorn
Differential Revision: https://phabricator.services.mozilla.com/D748

# This is the commit message servo#39:

Support memory report logs with interleaved non-report output, added automated tests

# This is the commit message servo#40:

Update WR revision.
# This is the commit message servo#41:

Add Servo_Property_IsShorthand to geckolib/glue.rs

# This is the commit message servo#42:

Re-expose webrender debugger feature in components/servo

Update ws in debugger  to 0.7.3

Update lockfile

# This is the commit message servo#43:

Update web-platform-tests to revision 3ec34e5a2c8cbeeb7fad521cce0daf923b272a92

# This is the commit message servo#44:

Make `type` argument as optional and ignore it in open method

# This is the commit message servo#45:

Update steps with new spec

# This is the commit message servo#46:

Make type-argument.window.js test as pass

# This is the commit message servo#47:

Simplify GetTexParameter

# This is the commit message servo#48:

Simplify VertexAttribOffset

# This is the commit message servo#49:

Simplify BufferParameter

# This is the commit message servo#50:

Simplify GetShaderPrecisionFormat

# This is the commit message servo#51:

Update web-platform-tests to revision 3a8328470d53c4501e31cec2775c4d33821c2275

# This is the commit message servo#52:

Mouse position from glutin is DevicePixel

# This is the commit message servo#53:

Update servo-websocket to 0.21

# This is the commit message servo#54:

Bump ipc-channel and bincode

This required bumping uuid too which unfortunately duplicated rand.

# This is the commit message servo#55:

Remove our dependency on the gcc crate

# This is the commit message servo#56:

Blobs support typed arrays now

# This is the commit message servo#57:

Bump parking_lot to 0.5

# This is the commit message servo#58:

initial shot at initial steps

# This is the commit message servo#59:

Second shot at initial steps

# This is the commit message servo#60:

Progress on initial steps

# This is the commit message servo#61:

initial shot at initial steps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
9 participants
You can’t perform that action at this time.