I’ve spent 26 days reading 26 years of messages from the Self mail conference archive. Here is what I’ve learned. Please note, that everything is highly subjective and may be even wrong.
Interesting messages
If you don’t want to go through all 4334 messages of whole archive, you may read just this dataset, which contains only 295 messages I’ve found interesting enough to save into separate directory. I’ve saved each message because it answered some of the questions I had, or because it was marking important milestone in Self development.
List of alternative languages / interpreters
When I’ve got to year 2004, I’ve realized it may be valuable also to store list of alternative interpreters and languages, which were sent to the conference, so I’ve began to collect them too. When I finished the reading, I’ve spent an hour by scanning the 1990-2004 timeframe, but I’ve maybe skipped something.
Just to give you the idea, here is the reduced list of topics (there is more in the archive):
- tinySelf progress report
- JSelf Home Page
- Announcing OpenSelf
- A Self _ BETA Language Hybrid Project
- premature announcement: SELFISH
- Brain language
- SELF for VisualWorks 5i
- dSelf
- New release of Cel
- Self_R not started yet
- Io
- Zero, a programming system
- [ANN] Slate 0.3 Released!
- Re: Self for Squeak
- Klein open-source release
- Self-style outliners for Javascript
- Phos
- Anyone have a copy of Kevo?
- Re: Distributed Objects
- Re: UnitTests
- AmbientTalk
- Self in Javascript progress
- Re: Self in Javascript progress
- Re: goals (was: dynamic deoptimization)
- Pooi: A prototypical object-oriented interpreter
- Avacado: JavaScript trying to be more like Self
- BOS1.2 release — play it again, sam
- Smalltalk interpreter of Self
Everything is dead, or dying
Self is small project maintained, discussed and used by only handful of people over two and half decades (one generation). It is slow game, and changes may take years (new releases), or decades (porting to new systems). This leads to massive link rot.
It may not be evident if you are just participating from time to time, but when you look into archive, it is a clear trend. Only a few people were able to keep attention and interest over the decades and maintain resources they created. There were a lot of those who lost interest or just didn’t have the time and their resources are dead.
Beginning of the Self conference archive is in 1990, which was a few years before the HTML and HTTP was invented.
I have no idea, how people organized work and thoughts in groups at that time (text files via FTP maybe? telephone and paper notepads?), but it is either converted to a few existing HTML resources, or (most likely) dead. You won’t see the design decisions, discussions or thoughts from that time.
Then HTML and HTTP came. People were excited about this new protocol:
From urs@cs.stanford.edu Sat, 19 Mar 1994 11:53:23 PST: Thanks mostly to Bay-Wie Chang, Self now has a Mosaic home page, http://self.stanford.edu All of our material continues to be available via ftp, but the Mosaic interface is definitively friendlier (e.g., it has an online bibliography and paper abstracts). Enjoy! -Urs
It was definitely an improvement. But idea to create articles and webpages about Self and put them on your web lead to massive resource fragmentation. I am not criticizing, merely pointing to a fact, that almost every link from that time is dead, because it was not maintained in long-term and that whole situation is actually unmaintainable by one person, even if that person really wanted to maintain it. That url in the email is by the way – dead.
When you think about it, almost every time anyone counted on third-party service, it didn’t pay off. From that point of view, everything is dying, we just don’t see it, because it still exists. But for the future newcomer to Self, it is already dead.
If you think in the time-frame of decades, all providers of services will end, often without replacement. Look at geocities for example. Once it was hosting for hundreds of thousands of webs. Now it is dead. Sourceforge killed itself by adding adware to user’s packages, and Yahoo is slowly dying and it is only matter of time until someone will buy it and shut down most of its services for good, because it is not profitable. University pages are chapter for itself, because almost all of them are dead soon after the person who created them leaves the university.
Even if the webarchive or other web cache archives the original, this is not the long time solution. There are various copyright attack in place right now, which may cause such services to close.
This may not look like a big issue, but for newcomers, this means that half of the valuable resources is not available.
If you look at what survives, it is almost always only files which were downloadable and thus shared by large number of people. In this sense, git is the best solution, because it allows everyone to clone the repository and synchronize it with others, even if the original resource is gone.
There is two possible options on how to overcome this problem:
- distributed standalone information resources shared by everyone
- maintained centralized group resources
If you create your own webpages, make them easily downloadable and sharable. Otherwise, they will be dead soon (5-20 years from now). Other option is to write articles in postscript / PDF and generally standalone files, which will be distributed to large number of people.
Second option is to make central repository of knowledge consciously maintained and hosted over the years by Self community at one place. Preferably in the form of Wiki. I will get back to this later.
Honorable mentions
FTP that refused to die
Date: Fri, 25 Aug 1995 12:45:08 +0200 From: rainer@physik3.gwdg.de (Rainer Blome) To: self-interest@self.sunlabs.com Subject: non-official ftp site in germany (solaris only) The link speed to Sun was really not acceptable when I tried it, so I was glad to be able to get Self from Manchester. Seems that I have been lucky now that the site is down. The FTP admin of our local computing centre was so kind as to put Self 4.0 on his server. It is not official and may vanish any time, but they have lots of disk space and I suppose it won't. Still, please don't use this site unless it is a lot faster than your link to the USA. Since the stuff is the one that I used to install Self here, it doesn't look exactly like the original (all files have the Self-4.0 prefix) and it is not complete (I only installed the solaris version). /ftp.gwdg.de:/pub/languages/self: total 12110 -rw-rw-r-- 1 emoenke 1475 Jul 26 17:05 Self-4.0.Install -rw-rw-r-- 1 emoenke 1933 Jul 26 17:04 Self-4.0.LICENSE -rw-rw-r-- 1 emoenke 1087 Jul 26 17:05 Self-4.0.README -rw-rw-r-- 1 emoenke 71809 Jul 26 17:05 Self-4.0.readThisFirst.ps -rw-rw-r-- 1 emoenke 12320062 Jul 26 14:16 Self-4.0.solaris.tar.gz Also, the tar file is gzipped instead of compressed. Not having patched the install script, it won't work anymore (unless you linked zcat to gzcat), but what Install actually did was just a single line anyway: gzip -cd Self-4.0.solaris.tar.gz | tar -xfpB - Greetings, Rainer
The FTP is still there, but sadly the Self directory isn’t.
merlintec
Jecel Mattos de Assumpcao Jr is my new personal hero.
Not only that http://www.merlintec.com/ still works and didn’t lose any of its contents, also his messages on various topics in the conference were really great and it was pleasure to read it.
Self is really complex
There is 114 821 cloc lines of C++ code (counted without comments, blank lines and so on). There is two kind of compilers (NIC, SIC), assembler and other platform-dependent stuff. Almost none of it is documented outside the code itself.
This is bad. Really bad. I did a little bit of C++ back in high school, but I can’t really imagine going through all this code and trying to make sense of it.
It is extremely hard to get an idea what Self really is, what parts is it made from. Best thing documenting how Self works is this schema from the handbook:
We need pictures like this that will document components of the VM. Schematic blueprints for what Self is and how it approximately works. Sometimes, pictures says more than a thousand words.
If you don’t think that this is serious, here is a list of reasons:
- It is hard for beginners to even get the idea what Self is. We know, that it is a language, but it is also virtual machine, bunch of compilers, memory managers and what not. It is almost like small operating system.
- It is hard for anyone who wants to contribute to get an idea where to do the change.
- It is hard for anyone who wants to port the Self to another architecture / OS.
- It leads to fragmentation. People rather create own forks, or whole new languages rather than to try to make sense in so much C++ code.
Linux
An example of the complexity of Self was its porting to Linux. First message about porting to Linux was probably this:
From dirkst@POOL.informatik.rwth-aachen.de Tue, 18 Aug 92 11:04:58 PDT From: dirkst@POOL.informatik.rwth-aachen.de (Dirk Steinberg) Date: Tue, 18 Aug 92 11:04:58 PDT Subject: Message-ID: <9208181757.AA24531@messua.informatik.rwth-aachen.de> MIME-Version: 1.0 Content-Type: text/plain Hi, I have recently read about Self and ftp'd some papers from self.stanford.edu, I even got the sun4 version of Self 2.0 and played around with it for a few minutes. Otherwise, I have no experience with Self whatsoever, but from what I read I am kand of enthusiastic. My question: Is anyone porting Self to some other platform, maybe even to the 386? I have Linux running on a 486/33 w/ 16 Meg RAM and 500 Meg HD, which should be a workable system for Self; I have gcc-2.2.2 and libg++-2.2, so it should be possible to compile the virtual machine (judging from the README's). BUT: I have the feeling that the compiler really generates native SPARC code and so one would have to write a completely new backend and assembler for the 386. I guess that would be a *major* project!?? Is the compiler/assembler written in Self or C++? If Self is tied to the SPARC achitecure and inherently non=portable, then that would nagatively influence the impact that this exciting software could have. How about using the gcc backend? Thanks for any info, Dirk Dirk Steinberg dirkst@pool.informatik.rwth-aachen.de
This is from 1992. First (not fully ported) Self for Linux came in 1999, by Gordon Cichon, but that wasn’t really much usable, from what I’ve read. Proper support with GUI and everything working nicely took several more years.
The bus factor is low
As the wikipedia says:
.. the bus factor is a measurement of the concentration of information in individual team members. It .. connotes the number of team members that can be unexpectedly lost from a project (“hit by a bus”, as it were) before the project collapses due to lack of knowledgeable or competent personnel.
The bus factor of Self is incredibly low. From my own estimate based on reading the archive, I would say it is 5, maybe 7 if you want to be optimistic, probably 3 if you want to be pessimistic.
This is not just bad, because it threatens existence of Self alone, but mostly because it also means that there is extremely low number of people, who really understand Self, and almost no documentation, which can train new experts.
Wikipedia offers following solution to increase the bus factor:
Several ways to increase the bus factor (thus making the project more resilient) have been proposed:
- Reduce complexity
- Document all processes and keep that documentation up-to-date
- Encourage cross-training.
I don’t think, that there is much space for reducing the complexity, but second and third point may be solvable by community Wiki.
YWAM KnowledgeBase also mentions two more interesting points:
- maintaining documentation about how the corresponding website is working
- forum for learning from each other
Again, both points may be solved by community Wiki. Especially the second point is really important.
Collected resources
I’ve collected following links, which are not yet dead, or were archived by webarchive. I didn’t yet have time to go over them, so I am sharing them as I added them to my todolist:
- http://kleinvm.sourceforge.net/
- https://github.com/aausch/klein
- http://adamspitz.github.io/Avocado/
- https://github.com/jmoenig/morphic.js
- http://lively-kernel.org/
- http://web.media.mit.edu/~lieber/Lieberary/Softviz/CACM-Debugging/Kansas/Kansas.html
- http://www.self-support.com/
- http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Self_(programming_language).html
- https://web.archive.org/web/20010813120828/http://www.mri.mq.edu.au/~kjx/tgim.html
- http://merlintec.com/swiki/Self/2.html
- http://merlintec.com/old-self-interest/threads.html
- https://web.archive.org/web/20050121084338/http://www.lsi.usp.br/~jecel/merlin.html
- http://www.merlintec.com/lsi/merlin.html
- https://web.archive.org/web/19980123025609/http://www.cs.unm.edu/pad++/begin.html
- https://web.archive.org/web/20040607063757/http://linus.socs.uts.edu.au/~cotar/proto/programme.html
- https://web.archive.org/web/20080307022735/http://www.consultar.com/JSelf/
- This file, when read into the initial Self system (empty world) creates just the objects needed to run a simple program that prints a table of factorials up to 49! and then stops. https://web.archive.org/web/20040312232625/http://www.lsi.usp.br/~jecel/release/fac.self
- https://web.archive.org/web/19991006225113/http://www.consultar.com/JSelf/Links.htm
- https://web.archive.org/web/20001109105100/http://www.consultar.com/JSelf/
- http://www.linuxsupportline.com/~openself/
- https://web.archive.org/web/20010405022406/http://openself.seul.org/
- https://web.archive.org/web/20070221212847/http://www.lsi.usp.br/~jecel/tut1.html
- https://web.archive.org/web/20000815211509/http://www.research.microsoft.com/ip/
- https://web.archive.org/web/20080225110457/http://www.lsi.usp.br/~jecel/persist.html
- https://web.archive.org/web/20000615190052/http://www.squeak.org/oopsla99_vmworkshop/jecel.txt
- https://web.archive.org/web/20000817004328/http://www.squeak.org/oopsla99_vmworkshop/
- http://www.merlintec.com/selfvmdoc/
- https://sourceforge.net/projects/selfish/
- http://www.3plus4.de/self/
- https://web.archive.org/web/20000504145352/http://www.sun.com/research/self/papers/craig-thesis.html
- https://web.archive.org/web/20010605131725/http://www.sun.com/research/self/papers/urs-thesis.html
- http://www.ag-nbi.de/research/dself/
- http://selfguru.sourceforge.net/
- http://ftp.squeak.org/docs/OOPSLA.Squeak.html
- https://web.archive.org/web/20150220064600/http://www.comtalk.net/Squeak/95
- http://merlintec.com/swiki/Self/1.html
- http://stefan-marr.de/tag/roarvm/
- http://merlintec.com/lsi/tiny.html
- https://dl.dropboxusercontent.com/u/1803213/CS294/8%20Self%20VM%20internals.pdf
- https://www.cs.ucsb.edu/~urs/oocsb/self/index.html
- https://liveprogramming.github.io/2013/papers/avocado.pdf
- http://c2.com/cgi/wiki?SelfLanguage
- https://news.ycombinator.com/item?id=7047953
- http://stackoverflow.com/questions/tagged/selflanguage
- https://www.infoq.com/presentations/oop-language-context
- http://xanadu.com/zigzag/
- http://www.nongnu.org/gzz/gi/gi.html
- http://www.merlintec.com/download/
- https://learnxinyminutes.com/docs/self/
- http://rosettacode.org/wiki/Category:Self
- https://vimeo.com/118826521
- http://homepages.ecs.vuw.ac.nz/~servetto/Fool2014/FundationForObjectAspectAndContextOrientedProgramming
- https://www.researchgate.net/publication/285512303_Persistence_schema_evolution_and_performance_in_the_container-based_model
- http://rosettacode.org/wiki/Category:Self
- http://www.gliebe.de/self/
- https://web.archive.org/web/20070205114801/http://www.lsi.usp.br/~jecel/tiny.html
tinyRicktinySelf - http://www.wolczko.com/CS294/
Next blog will contain some improvement proposals.
Relevant discussion: https://groups.yahoo.com/neo/groups/self-interest/conversations/topics/3318
[…] Lessons Learnt from the Self Archive – A fascinating dive into Self programming language discussion archives. […]
Hi, I’m the proverbial new user here and I actually agree with almost all of this assessment. add to that the fact I’m not trained or schooled in programming and data structures, and am more of an artist by trade, the only thing that has kept me really poking around at self is its promises, even though there’s actually not much documentation or tutorials for someone with no programming background which I find disappointing for a language that seems to be geared toward novices at least in part.
I think if self had a package of examples to pull apart and dissect to learn from, it could do a lot just o it’s own to provide usable information for beginners. I was able to pick up hypercard with just its default examples of which there were too many to count. Even squeak provides tons of applets to examine and if you’re like me and still don’t k ow how to use the class browser to find anything to program, there’s tons of toys and morphic tools enabling experimentation even without learning the language fundamentals.
I think before self can get a user base, its going to need to entice them first with solid examples and toys, as silly as that sounds. self begs to be used by more than computer scientists but currently, it only talks and acts like that is who its for and this too will keep the community small. I’ve seen other great software and tools die because of the initial impressions it leaves on the casual passers by.
I’d love to assist in any kind of effort to help create a demo package of some sort for self or tutorial option package. Self seems like it’s more user friendly than even etoys, but it’s definitely not winning any friends right now, and I think no examples and demos and tutorials is a large part of it. 2 lectures in general doesn’t cut it, else selfwould have a much more lively community, yes?
Thank you for your feedback.
Yes, I think that missing tutorials are a big part of the problem with size of Self community.
There was demo snapshot before (see https://www.youtube.com/watch?v=YR4pFk0xj9w for details), but sadly it doesn’t work with latest Self version.
I think I may do some kind of tutorial web in the future.