Short description: Hazelnuts is a project aimed to bootstrap a minimum and working kernel of the Pharo smalltalk system. Hazelnut should provide kernel generation, validation, and serialization into a new image. Also, it should have a way to debug and test the results, and to make the resulting kernel growable via compilation, inclusion of compiled libraries or remote programming.
Additional info: http://gsoc2012.esug.org/projects/bootstrapping...
This is my proposal for Hazelnut.
Briefly about me
I'm an argentinian System Engineer currently doing a Phd between Ecole des Mines de Douai and University of Lille. I've been using Smalltalk for the last 5 years, for teaching purposes and developing some stuff. I participate in the pharo project.
About my study
I'm a System Engineer graduated in UTN-FRBA from Buenos Aires Argentina, currently doing a Phd between Ecole des Mines de Douai and University of Lille, in France.
I'm interested in software evolution, tool building, a little in software usability.
My non-Smalltalk experiences so far
I've worked in the software industry for four years in Argentina, developing custom applications in several technologies like Java-including some android and blackberry-, .net, php, python doing desktop, web, backend and mobile applications.
My Smalltalk experiences so far
I've used Smalltalk for 5 years to teach OOP in UTN-FRBA as a teacher assistant. In there, we are using a TOOL called LOOP we do in pharo to support teaching, and which won the 3rd price in the Innovation Technology Awards in the ESUG conference last year.
Two years ago I got involved into the pharo project, fixing some bugs, doing some little manteinance and reviving the Keymappings project, aimed to give the environment a common way to declare keyboard shortcuts for it's GUI.
Last year me and Santiago Bragagnolo participated in the Esug Summer of Talk for the DBXTalk project, developing some new tools to work on relational databases in Pharo(http://dbxtalk.smallworks.com.ar/).
Why am I interested in Smalltalk?
Smalltalk is a beautiful language, that let's you do things you can't in other environments. But it lacks of work and tools so corporate people takes it into account. I want to help a little bit on enhancing the smalltalk environment and tools.
Will I stay with Smalltalk after the project is finished?
I think the former questions answered it already :).
How will I do that project
I'll spend at least 20 hours a week in the project. I'll sync periodically with my mentors to show them the advances and discuss the following steps.
From the community side, I'll give visibility for the project after each important milestone, providing also the minimum documentation for people to use the project software.
On the technological side, I have to spend some time to understand SystemTracer and existing (working and not working) bootstrap implementations. Then
-SystemTracer needs clearly a refactor and some tests.
-Decide to start the new bootstrap from an existing implementation or from scratch.
What methodologies will I use
I'll use weekly milestones to organise my work, choosing the tasks to be done at the beginning of each week together with my mentors. I'll mostly use TDD to guide the development. If I can get the infrastructure I'd love to setup a CI server for the project.
I'll provide constant visibility to my mentors, so we can take decisions together.
Suggested timeline and milestones
1) Refactor SystemTracer to allow the creation of a reduced image, and let it open to choose the image format in a near future.
2) Create a functional bootstrap
- Ensure bootstrap object graph is transitive closed.
- provide tests over the bootstrap process
- provide testing for the new created bootstrap
- make it able to handle kernel specifications
3) Make new SystemTracer write the bootstrap
4) Provide a declarative way to specify the bootstrap
5) Introduce Fuel integration to make bootstrap grow without Compiler
6) Provide some way of network connection to allow remote coding/debugging (like introducing RTalk)
Where I see the risks
When working on the bootstrap I'll for sure find:
- bad packaging of classes and methods
- bad managed dependencies
- limitations on the VM with special objects like compiled methods, the literals nil, true, false
The first two can be managed working together with the Pharo community to solve the issues.
For the third point, the bootstrap should have for sure a well documented workaround to handle those special objects or an special VM should be used.
How the results will look like
The Pharo community will have a tool to generate a functional kernel from a pharo image providing a kernel specification like in:
ImageWriter writeImage: (HazelnutKernelBuilder buildKernel: (ProductionSpecification new))