|Proposed by Guillermo Polito (profile, biography) Don't forget to submit this proposal to official Google Melange site too!
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))