Developing software for embedded systems is a challenging task. Targeted devices are subject to various constraints on computational resources (CPU, Memory), on energetic resources (battery) and on input/output peripherals (keyboard, mouse, screen. . . ) to name a few. The traditional approach to deal with these constraints consist in using low-level languages such as C or even assembly. A more comfortable solution appeared in recent years consist in using higher-level languages such as Java with J2ME (Java 2 Micro Edition) or C# with .Net compact framework. However, developers have to use only a sub-set of libraries and language features used for developing desktop applications. For example, KVM the VM implementation for J2ME CLDC1 does not support many features of the regular JVM such as reﬂection, generics, annotations, extended for loops, static imports, and auto-boxing/unboxing.
Besides, developers have to explicitly select libraries to use: desktop libraries or embedded libraries depending on the application purpose. This selection process of elements that have to be integrated in a ﬁnal application is essentially a manually process (e.g declaration of import clause in Java). It is also a coarse-grained process because it only enables class or package selection. Therefore, the ﬁnal application still contains unused code (methods, ﬁelds, ...).
The work to be carried out as part of this PhD thesis aimed at providing a solution (model and tools) that uniﬁes software development of both desktop and embedded software. Starting from the same library, the proposed solution will enable to develop software either for desktop or embedded systems. During the deployment phase, an extreme remodularization will be applied to the software code according to the target system constraints. This automatic process will identify packages, classes, methods or even ﬁelds that are not used by the software and will remove them in the ﬁnal version. Further, a dynamic remodularization process could also minimizes the memory footprint of the ﬁnal software by loading and unloading the different parts of the program during its execution.
The PhD student will validate its results through experimentation on different embedded systems such as PDAs, Smartphones as well as mobile robotic systems.
I am thinking in the idea, not in any implementation or solution in particular. I imagine having a smalltalk that fits better for limited hardware such as PDA, mobile phones, iPhone, robots among others. My idea is to have a minimal, but really minimal kernel loaded at the beginning. I mean, the minimal you need to boostrap. Then, you have also a kind of repository which is in a non volatile memory. I mean, it is in a hdd for example, but not in RAM. This repository can be .sources, something like an ENVY library, an ImageSegment written to a file, or whatever.
You then have your applications or whatever that runs on top of that smalltalk. This smalltalk will load the necessary things for this application, with two conditions: 1) it will do it at runtime in a lazy way, just when needed. 2) the application does not have to explicitly tell smalltalk what it needs to load. This must be done automatically.
Of course, this Smalltalk will see if whatever it needs is loaded and if it is not, it will search it in the repository and then loaded in the image. The granularity here can be method, class, package, segment, etc. I really don't know.
So it should be possible to have (at some point) a mechanism that does this not only on code, but on any object. There are a lot of objects in a Pharo image that are just data. (fonts, sounds, bitmaps...). Another idea is to also unload stuff when this is not needed any more.
Phone: 2111 Phone (full): \+33 (0)3 27 71 21 11 Email: firstname.lastname@example.org
Ecole des Mines de Douai - Dépt. I.A - NORD EUROPE 941 rue Charles Bourseul - B.P. 10838 59508 Douai Cedex France