<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki.apidesign.org/skins/common/feed.css?116"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=EnforcingProperUsage</id>
		<title>EnforcingProperUsage - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.apidesign.org/index.php?action=history&amp;feed=atom&amp;title=EnforcingProperUsage"/>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;action=history"/>
		<updated>2026-04-12T20:42:33Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.12.0rc1</generator>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8507&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Summary */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8507&amp;oldid=prev"/>
				<updated>2015-06-14T14:08:08Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Summary&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 14:08, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fear &lt;/del&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; co. from [[GPLwithClassPathException]] to [[GPL]] seems to [[I|me]] like the best thing [[OpenJDK]] team should do. Unless it &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fears &lt;/ins&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Encapsulation]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Encapsulation]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8506&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Summary */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8506&amp;oldid=prev"/>
				<updated>2015-06-14T14:07:46Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Summary&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 14:07, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; 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 &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Oracle]] &lt;/del&gt;lawyers to prevent that!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; 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!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Encapsulation]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Encapsulation]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8505&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Legal solution */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8505&amp;oldid=prev"/>
				<updated>2015-06-14T09:21:28Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Legal solution&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:21, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 37:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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 &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;that &lt;/ins&gt;calling hidden implementation methods of classes is derived from a knowledge of these classes - e.g. [[GPL]] remains viral.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Summary ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Summary ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8504&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Legal solution */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8504&amp;oldid=prev"/>
				<updated>2015-06-14T09:20:12Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Legal solution&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:20, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;- &lt;/del&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;We all know [[WhyGPL]] is useful - it is viral. It is also clear why [[GPLwithClassPathException]] is useful - as it is not viral&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/ins&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8503&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Legal solution */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8503&amp;oldid=prev"/>
				<updated>2015-06-14T09:19:08Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Legal solution&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:19, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Legal solution ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Legal solution ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;So the technical solutions are limited. For many years [[I]] tried to prevent &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;hacks using &lt;/del&gt;[[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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;So the technical solutions are limited. For many years [[I]] tried to prevent &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;hacking of &lt;/ins&gt;[[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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8502&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Summary */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8502&amp;oldid=prev"/>
				<updated>2015-06-14T09:12:08Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Summary&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:12, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 43:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; 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!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; 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 &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;at large&lt;/ins&gt;: Hacking around [[JDK]] internals is [[good]] and nobody should use [[Oracle]] lawyers to prevent that!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Encapsulation]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns:Encapsulation]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:APIDesignPatterns]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8501&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Legal solution */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8501&amp;oldid=prev"/>
				<updated>2015-06-14T09:10:38Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Legal solution&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:10, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 35:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 35:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;However we can go even further: we can use these licenses to prevent &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;(non-public) &lt;/del&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8500&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Legal solution */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8500&amp;oldid=prev"/>
				<updated>2015-06-14T09:10:15Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Legal solution&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:10, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 33:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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 &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;ones&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8499&amp;oldid=prev</id>
		<title>JaroslavTulach: /* Legal solution */</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8499&amp;oldid=prev"/>
				<updated>2015-06-14T09:09:35Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Legal solution&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:09, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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 &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;package &lt;/del&gt;that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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 &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;packages &lt;/ins&gt;that are supposed to contain [[API]] are licensed under [[GPLwithClassPathException]]. The implementation parts of the project (like tests) are kept under [[GPL]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	<entry>
		<id>http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8498&amp;oldid=prev</id>
		<title>JaroslavTulach at 09:08, 14 June 2015</title>
		<link rel="alternate" type="text/html" href="http://wiki.apidesign.org/index.php?title=EnforcingProperUsage&amp;diff=8498&amp;oldid=prev"/>
				<updated>2015-06-14T09:08:48Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:08, 14 June 2015&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 44:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; 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!&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Re-licensing ''sun.misc.Unsafe'' &amp;amp; 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!&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:APIDesignPatterns:Encapsulation]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:APIDesignPatterns]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>JaroslavTulach</name></author>	</entry>

	</feed>