JaroslavTulach: /* Summary */ - 2015-06-14 14:08:08

Summary

←Older revision Revision as of 14:08, 14 June 2015
Line 43: Line 43:
Labelling classes considered public [[API]] with [[GPLwithClassPathException]] and labelling all others (package private, accidentally visible, etc.) with [[GPL]] is a cute way to give hackers a freedom to experiment, but prevent the hacks to get to production (non-[[GPL]]) systems.
Labelling classes considered public [[API]] with [[GPLwithClassPathException]] and labelling all others (package private, accidentally visible, etc.) with [[GPL]] is a cute way to give hackers a freedom to experiment, but prevent the hacks to get to production (non-[[GPL]]) systems.
-
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fear such change might break the unspoken contract with the Java community at large: Hacking around [[JDK]] internals is [[good]] and nobody should use lawyers to prevent that!
+
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fears such change might break the unspoken contract with the Java community at large: Hacking around [[JDK]] internals is [[good]] and nobody should use lawyers to prevent that!
[[Category:APIDesignPatterns:Encapsulation]]
[[Category:APIDesignPatterns:Encapsulation]]
[[Category:APIDesignPatterns]]
[[Category:APIDesignPatterns]]

JaroslavTulach: /* Summary */ - 2015-06-14 14:07:46

Summary

←Older revision Revision as of 14:07, 14 June 2015
Line 43: Line 43:
Labelling classes considered public [[API]] with [[GPLwithClassPathException]] and labelling all others (package private, accidentally visible, etc.) with [[GPL]] is a cute way to give hackers a freedom to experiment, but prevent the hacks to get to production (non-[[GPL]]) systems.
Labelling classes considered public [[API]] with [[GPLwithClassPathException]] and labelling all others (package private, accidentally visible, etc.) with [[GPL]] is a cute way to give hackers a freedom to experiment, but prevent the hacks to get to production (non-[[GPL]]) systems.
-
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fear such change might break the unspoken contract with the Java community at large: Hacking around [[JDK]] internals is [[good]] and nobody should use [[Oracle]] lawyers to prevent that!
+
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fear such change might break the unspoken contract with the Java community at large: Hacking around [[JDK]] internals is [[good]] and nobody should use lawyers to prevent that!
[[Category:APIDesignPatterns:Encapsulation]]
[[Category:APIDesignPatterns:Encapsulation]]
[[Category:APIDesignPatterns]]
[[Category:APIDesignPatterns]]

JaroslavTulach: /* Legal solution */ - 2015-06-14 09:21:28

Legal solution

←Older revision Revision as of 09:21, 14 June 2015
Line 37: Line 37:
However we can go even further: we can use these licenses to prevent hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!
However we can go even further: we can use these licenses to prevent hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!
-
No [[API]] user should be linking against implementation classes. Releasing them under [[GPL]] license will effectively prevent that (unless one accepts the [[WhyGPL|virality of the license]] and releases own hacks to public under [[GPL]] license as well). Not only this prevents normal (e.g. non-[[GPL]] users) from a compilation against such non-public classes, but it effectively prevents reflective access as well. Usually the [[GPL]] is interpreted as being ''linkage''-viral, but the text talks in general about ''derived work'' and it is clear calling hidden implementation methods of classes is derived from a knowledge of these classes - e.g. [[GPL]] remains viral.
+
No [[API]] user should be linking against implementation classes. Releasing them under [[GPL]] license will effectively prevent that (unless one accepts the [[WhyGPL|virality of the license]] and releases own hacks to public under [[GPL]] license as well). Not only this prevents normal (e.g. non-[[GPL]] users) from a compilation against such non-public classes, but it effectively prevents reflective access as well. Usually the [[GPL]] is interpreted as being ''linkage''-viral, but the text talks in general about ''derived work'' and it is clear that calling hidden implementation methods of classes is derived from a knowledge of these classes - e.g. [[GPL]] remains viral.
== Summary ==
== Summary ==

JaroslavTulach: /* Legal solution */ - 2015-06-14 09:20:12

Legal solution

←Older revision Revision as of 09:20, 14 June 2015
Line 33: Line 33:
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The packages that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The packages that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].
-
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral - it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only ones.
+
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral, it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only ones.
However we can go even further: we can use these licenses to prevent hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!
However we can go even further: we can use these licenses to prevent hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!

JaroslavTulach: /* Legal solution */ - 2015-06-14 09:19:08

Legal solution

←Older revision Revision as of 09:19, 14 June 2015
Line 29: Line 29:
== Legal solution ==
== Legal solution ==
-
So the technical solutions are limited. For many years [[I]] tried to prevent hacks using [[NetBeans]] internals and [[I]] have to admit: unless you take away the reflective permission from the code, there is no engineering way to do it.
+
So the technical solutions are limited. For many years [[I]] tried to prevent hacking of [[NetBeans]] internals and [[I]] have to admit: unless you take away the reflective permission from the code, there is no engineering way to do it.
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The packages that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The packages that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].

JaroslavTulach: /* Summary */ - 2015-06-14 09:12:08

Summary

←Older revision Revision as of 09:12, 14 June 2015
Line 43: Line 43:
Labelling classes considered public [[API]] with [[GPLwithClassPathException]] and labelling all others (package private, accidentally visible, etc.) with [[GPL]] is a cute way to give hackers a freedom to experiment, but prevent the hacks to get to production (non-[[GPL]]) systems.
Labelling classes considered public [[API]] with [[GPLwithClassPathException]] and labelling all others (package private, accidentally visible, etc.) with [[GPL]] is a cute way to give hackers a freedom to experiment, but prevent the hacks to get to production (non-[[GPL]]) systems.
-
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fear such change might break the unspoken contract with the Java community: Hacking around [[JDK]] internals is [[good]] and nobody should use [[Oracle]] lawyers to prevent that!
+
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fear such change might break the unspoken contract with the Java community at large: Hacking around [[JDK]] internals is [[good]] and nobody should use [[Oracle]] lawyers to prevent that!
[[Category:APIDesignPatterns:Encapsulation]]
[[Category:APIDesignPatterns:Encapsulation]]
[[Category:APIDesignPatterns]]
[[Category:APIDesignPatterns]]

JaroslavTulach: /* Legal solution */ - 2015-06-14 09:10:38

Legal solution

←Older revision Revision as of 09:10, 14 June 2015
Line 35: Line 35:
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral - it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only ones.
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral - it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only ones.
-
However we can go even further: we can use these licenses to prevent (non-public) hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!
+
However we can go even further: we can use these licenses to prevent hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!
No [[API]] user should be linking against implementation classes. Releasing them under [[GPL]] license will effectively prevent that (unless one accepts the [[WhyGPL|virality of the license]] and releases own hacks to public under [[GPL]] license as well). Not only this prevents normal (e.g. non-[[GPL]] users) from a compilation against such non-public classes, but it effectively prevents reflective access as well. Usually the [[GPL]] is interpreted as being ''linkage''-viral, but the text talks in general about ''derived work'' and it is clear calling hidden implementation methods of classes is derived from a knowledge of these classes - e.g. [[GPL]] remains viral.
No [[API]] user should be linking against implementation classes. Releasing them under [[GPL]] license will effectively prevent that (unless one accepts the [[WhyGPL|virality of the license]] and releases own hacks to public under [[GPL]] license as well). Not only this prevents normal (e.g. non-[[GPL]] users) from a compilation against such non-public classes, but it effectively prevents reflective access as well. Usually the [[GPL]] is interpreted as being ''linkage''-viral, but the text talks in general about ''derived work'' and it is clear calling hidden implementation methods of classes is derived from a knowledge of these classes - e.g. [[GPL]] remains viral.

JaroslavTulach: /* Legal solution */ - 2015-06-14 09:10:15

Legal solution

←Older revision Revision as of 09:10, 14 June 2015
Line 33: Line 33:
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The packages that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The packages that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].
-
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral - it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only.
+
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral - it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only ones.
However we can go even further: we can use these licenses to prevent (non-public) hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!
However we can go even further: we can use these licenses to prevent (non-public) hacks! If there is a class in a non-public package (like ''sun.misc.Unsafe'') just license it under [[GPL]]. If there are package private classes in otherwise public [[API]] package - give them [[GPL]] license as well!

JaroslavTulach: /* Legal solution */ - 2015-06-14 09:09:35

Legal solution

←Older revision Revision as of 09:09, 14 June 2015
Line 31: Line 31:
So the technical solutions are limited. For many years [[I]] tried to prevent hacks using [[NetBeans]] internals and [[I]] have to admit: unless you take away the reflective permission from the code, there is no engineering way to do it.
So the technical solutions are limited. For many years [[I]] tried to prevent hacks using [[NetBeans]] internals and [[I]] have to admit: unless you take away the reflective permission from the code, there is no engineering way to do it.
-
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The package that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].
+
However recently [[I]] started to work on [[Truffle]] [[API]] and [[I]] noticed interesting thing: the [[Truffle]] [[Hg]] repository is using two licenses: [[GPL]] and [[GPLwithClassPathException]]. The packages that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral - it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only.
We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral - it increases adoption of your [[API]]. Mixing them in a single project like [[Truffle]] makes sense. It separates the public parts from the implementation only.

JaroslavTulach at 09:08, 14 June 2015 - 2015-06-14 09:08:48

←Older revision Revision as of 09:08, 14 June 2015
Line 44: Line 44:
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fear such change might break the unspoken contract with the Java community: Hacking around [[JDK]] internals is [[good]] and nobody should use [[Oracle]] lawyers to prevent that!
Re-licensing ''sun.misc.Unsafe'' & co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it fear such change might break the unspoken contract with the Java community: Hacking around [[JDK]] internals is [[good]] and nobody should use [[Oracle]] lawyers to prevent that!
 +
 +
[[Category:APIDesignPatterns:Encapsulation]]
 +
[[Category:APIDesignPatterns]]