[Etoys] Fully Relicensed version of mainstream Squeak

Andreas Raab andreas.raab at gmx.de
Thu Oct 23 01:47:02 EDT 2008


Matthew Fulmer wrote:
> It sounds like a good plan. Do you have a patch I could use to
> get started? I would definitely like to see just how bad the
> situation is in 3.9 or 3.10. Croquet would be nice too, but I
> think the history of Croquet is much more muddled than the
> history of squeak.org

Probably not. Remember that both Tweak and Croquet were MIT licensed 
from day one which really simplifies matters since all contributions 
were always understood to be MIT licensed. The only question is whether 
the Croqut base image (deployment/Homebase.image) is squeaky license 
clean or not (pun intended). A quick check - comparing the versions in 
homebase.image with the versions in etoys4 - shows that any auditing 
effort should be *very* manageable (mostly because they share the same 
3.8 ancestry). Here is the total of methods that are in Homebase.image 
and where etoys4.image has different versions (scripts below):

Kernel:         245 / 3035 (91.92% identical)
Collections:    124 / 2047 (93.94% identical)
Compression:     13 / 435  (97.01% identical)
Multilingual:   179 / 1023 (82.5% identical)
Graphics:       110 / 2196 (94.99% identical)
GraphicsTools: 	  1 / 179  (99.44% identical)
TrueType:         9 / 140  (93.57% identical)
XML-Parser:      21 / 339  (93.8% identical)
Network:        195 / 1910 (89.79% identical)
Morphic:       1349 / 11534(88.3% identical)
SmaCC:            0 / 113  (100.0% identical)
Sound:           61 / 1523 (95.99% identical)
Files:           28 / 513  (94.54% identical)
System:         469 / 3317 (85.86% identical)
Exceptions:      13 / 229  (94.32% identical)
Balloon:         72 / 462  (84.41% identical)
Movies:          61 / 524  (88.35% identical)
Flash:           20 / 723  (97.23% identical)
Tools:          203 / 1946 (89.56% identical)
ST80:            50 / 1559 (96.79% identical)
Nebraska:       169 / 707  (76.09% identical)
FFI:             10 / 393  (97.45% identical)
Compiler:        94 / 657  (85.69% identical)
Protocols:       15 / 297  (94.94% identical)

SUnit:            0 / 221 (100.0% identical)
Tests:            1 / 394 (99.74% identical)
MorphicTests:     6 / 47  (87.23% identical)
NetworkTests:     0 / 48  (100.0% identical)
KernelTests:     13 / 657 (98.02% identical)
GraphicsTests:    0 / 79  (100.0% identical)
CollectionsTests: 0 / 115 (100.0% identical)

SMBase:         335 / 603  (44.44% identical)
SMLoader:        21 / 98   (78.57% identical)
Games:          613 / 1358 (54.86% identical)

PackageInfo-Base: 41 / 134 (69.4% identical)
Monticello:    1763 / 1763 (0.0% identical)
VersionNumber:    0 / 36   (100.0% identical)
TweakMC:         21 / 21  (0.0% identical)
MonticelloConfigurations: 113 / 113 (0.0% identical)

ToolBuilder-Kernel:  305 / 305 (0.0% identical)
ToolBuilder-Morphic: 142 / 142 (0.0% identical)
StarSqueak:     208 / 209 (0.47% identical)
Scamper:         90 / 90  (0.0% identical)
VMMaker:       3507 / 3531(0.67% identical)
Speech:         954 / 954 (0.0% identical)

Note that for most of the core packages (like Network or Morphic) I 
would expect the changes to come from the etoys image due to the 
modifications done for OLPC. In reality I would expect that you would 
probably have to audit less than 5% of the code base. And of that I 
would expect a goodly chunk to be written by yours truly which means it 
is either covered by the VPRI or the Croquet license.

Cheers,
   - Andreas

[--------- Creates a file with all versions of all methods ----------]
"Run this in homebase.image"
Utilities informUserDuring:[:bar|
allVersions := MCWorkingCopy allManagers collect:[:mgr|
	info := mgr package packageInfo.
	bar value: 'Processing ', info name.
	Array with: info name with: (info methods collect:[:mref|
		Array with: mref actualClass name
			with: mref methodSymbol
			with: mref compiledMethod timeStamp]).
]].
(FileStream forceNewFileNamed: 'C:\homebase.versions')
	fileOutClass: nil andObject: allVersions;
	close.

[-------- Compares the above file with the current image ---------]

allVersions ifNil:[
	[file := FileStream readOnlyFileNamed: 'C:\homebase.versions'.
	allVersions := file fileInObjectAndCode] ensure:[file close].
].
Utilities informUserDuring:[:bar|
allVersions do:[:pspec|
	pkgName := pspec first.
	bar value: 'Verifying ', pkgName.
	total := matches := 0.
	pspec second do:[:mspec|
		cls := Smalltalk classNamed: mspec first.
		cls ifNotNil:[method := cls compiledMethodAt: mspec second ifAbsent:[]].
		method ifNotNil:[stamp := method timeStamp].
		stamp = mspec third ifTrue:[matches := matches + 1].
		total := total + 1.
	].
	Transcript cr; show: pkgName,': ', (total-matches) asString,' / ', 
total asString,' (', (matches asFloat / total * 100 truncateTo: 0.01) 
asString, '% identical)'.
]].


More information about the Etoys mailing list