| 1 | = Manifesto = |
| 2 | |
| 3 | Written by Alexandre Becoulet, Joël Porquet and Nicolas Pouillon. |
| 4 | |
| 5 | == What is MutekH? == |
| 6 | |
| 7 | MutekH is the kernel part of an Operating System. Its major |
| 8 | characteristics are portability and modularity, which are both |
| 9 | necessary for handling multiprocessor platforms with processor |
| 10 | heterogeneity in a native manner. |
| 11 | |
| 12 | MutekH is first and foremost a research project: it must |
| 13 | remain a tool for experimentation. Nowadays, thinking |
| 14 | it is possible to replace kernels such as Linux would be crazy as its development |
| 15 | costs are estimated at |
| 16 | [http://www.dwheeler.com/essays/linux-kernel-cost.html several hundreds millions dollars]. |
| 17 | Even though, this is not completely true for embedded systems yet. |
| 18 | |
| 19 | Whether MutekH should become something other than a research project is not |
| 20 | the point. For now, it is a research project |
| 21 | because people use it this way. But as we make efforts to |
| 22 | maintain a high quality code, documentation and website, the choice is |
| 23 | no longer ours. The situation can change tomorrow, or never. |
| 24 | This is actually a matter of users rather than design. Besides, it |
| 25 | is actually possible MutekH is used somewhere else without our |
| 26 | knowledge. |
| 27 | |
| 28 | Its exo-kernel architecture was first suggested by Frédéric Pétrot, |
| 29 | early in the development process. It was chosen because it was |
| 30 | well-adapted to the modularity requirement and because it remains an |
| 31 | interesting research field. |
| 32 | |
| 33 | Several PhD students soon started using MutekH for their own |
| 34 | research works. MutekH definitely doesn't belong to the sole original author, |
| 35 | thanks to the number of contributions others integrated. |
| 36 | Lot of additional work has also been achieved by the means of internships. |
| 37 | This has increased the number of services offered by the kernel, opening new usage |
| 38 | perspectives and facilitating various aspects of development. |
| 39 | |
| 40 | == Why yet a new kernel project? == |
| 41 | |
| 42 | MutekH development was started as an attempt to write the first kernel |
| 43 | capable of handling processors heterogeneity in shared memory platforms. |
| 44 | This means MutekH should run on multiprocessor platforms composed of different |
| 45 | processors types, with possibly different instruction sets, and still share all |
| 46 | global variables and in memory data, allowing to run classical multi-threaded |
| 47 | applications without relying on a specific API. |
| 48 | |
| 49 | Heterogeneity constraints implied a lot of attention to the development of |
| 50 | the hardware abstraction layer (HAL). MutekH was first developed to end up |
| 51 | being a tiny project, that's why it appeared it was a better approach |
| 52 | to write a new HAL from scratch to handle heterogeneity with extreme portability constraints. |
| 53 | |
| 54 | Unexpectedly, MutekH has been adopted by others, as explained above, for |
| 55 | various research projects, not related to processor heterogeneity. That is why the project |
| 56 | really started to grow. |
| 57 | |
| 58 | == Why is MutekH well-suited for research? == |
| 59 | |
| 60 | Large projects are sometimes too complex to be used as experimentation playgrounds. |
| 61 | As a researcher, you generally want to quickly setup new modules and features |
| 62 | on a preexisting base project and focus on your research goal. This base is typically |
| 63 | provided by modular projects such as MutekH because you can choose interesting |
| 64 | modules and extend them with new ones, to get the minimal suited set of features |
| 65 | to perform experiments. The integration effort in large and widespread projects |
| 66 | can then be considered later when the experiment cycle is over and results are conclusive. |
| 67 | |
| 68 | We believe this approach is well suited when applied to research and kernel concepts. |
| 69 | The older OSKit project followed the same idea and actually had a great success. |
| 70 | In opposition, many have tried to compete with existing kernels, and have only ended |
| 71 | up adding their attempt to the endless "Yet Another..." list. |
| 72 | |
| 73 | Furthermore, the Lip6-SoC laboratory where MutekH has originated is quite familiar |
| 74 | with development of research tools. The [http://www-asim.lip6.fr/recherche/alliance/ Alliance CAO suite] |
| 75 | and [http://www-asim.lip6.fr/recherche/disydent/ Disydent project] were good examples |
| 76 | of such free software tools. |
| 77 | More recently the development of [http://www.soclib.fr SoCLib], a hardware simulator |
| 78 | and components library, was initiated in an attempt to provide a modular framework for |
| 79 | building multiprocessor System-on-Chip virtual prototypes. The modular design is the |
| 80 | key point of the SoCLib project as it enables researchers to build their own platforms by |
| 81 | picking needed hardware component models. MutekH aims at genericity and modularity |
| 82 | with the exact same goals, but applied to kernels design. |
| 83 | |
| 84 | == Is MutekH a pedagogic tool? == |
| 85 | |
| 86 | MutekH is not a kernel for teaching beginners. |
| 87 | |
| 88 | == Should MutekH specialize? == |
| 89 | |
| 90 | No. MutekH should not specialize in a particular field, for several reasons: |
| 91 | |
| 92 | * We are fortunate enough to have developed a kernel with a |
| 93 | very modular and configurable design. This is partially a side-effect of the |
| 94 | mandatory portability needed for heterogeneity but |
| 95 | it is also due to the great diversity of other initial developers' |
| 96 | research work. |
| 97 | |
| 98 | * We need to keep this broad-spectrum experimentation platform |
| 99 | aspect. This way it can be of interest to most people as it has |
| 100 | been the case until now. When you need a kernel to perform research, you |
| 101 | generally try avoid loosing time reinventing the wheel and want to reuse |
| 102 | existing facilities, such as a buildsystem, drivers for peripheral |
| 103 | devices, libc, services, etc. It is likely that these key elements |
| 104 | have already been tested, debugged and validated by others, or even |
| 105 | simply imported from other well-tried projects. |
| 106 | |
| 107 | * In a research context, the versatility, genericity and collaborative aspect of MutekH |
| 108 | guarantees that you are working in realistic conditions. |
| 109 | Otherwise, you could end up solving problems in conditions unlikely to arise in the real world |
| 110 | or with a demonstrator only usable for a specific purpose. |
| 111 | |
| 112 | * A system intended for research should above all show interest in |
| 113 | the generic programming issue. This opens numerous research |
| 114 | perspectives in terms of kernel architecture or software design patterns, |
| 115 | even though it is not the main topic in our lab. The |
| 116 | exo-kernel architecture is a real goldmine in this prospect and yet |
| 117 | remains not fully investigated. |
| 118 | |
| 119 | Other kernels such as Linux or NetBSD are able, by taking care of the |
| 120 | software modeling, to run on very various systems, from Set-top boxes |
| 121 | without any MMU to Cray, equipped with 224556 processors and 62TiB |
| 122 | memory. Though, this achievement is reached with the same source code, an |
| 123 | huge list of features and without any trade-off on |
| 124 | performance. De facto, it has never even been considered to rewrite |
| 125 | kernel projects from scratch just to solve new issues that arise with |
| 126 | hardware evolution. |
| 127 | |
| 128 | Therefore, it is definitely realistic to achieve the exact same |
| 129 | performance with our small kernel. |
| 130 | |
| 131 | == What is the development process? == |
| 132 | |
| 133 | Lots of various problems come up. Basically, |
| 134 | algorithms to solve them are implemented accordingly to the complexity |
| 135 | and specificity of the underlying hardware. |
| 136 | |
| 137 | For a kernel such as |
| 138 | MutekH which aims at covering a broad-spectrum of platforms, we need to act this way: |
| 139 | |
| 140 | * Use a source code configuration tool that manages conflicts and |
| 141 | dependencies efficiently. |
| 142 | |
| 143 | * Team up, and consider issues and constraints of all developers to |
| 144 | converge on the most suitable API which thus will guarantee the best |
| 145 | abstraction. MutekH would certainly not be as it is now, if it has |
| 146 | been a one man project with an inevitable narrower vision. |
| 147 | |
| 148 | * For the parts which deal with the hardware abstraction layer, make sure solutions are |
| 149 | portable for every different architecture we have at our disposal. That is why we |
| 150 | insisted right at the beginning of the project to target x86 CISC as well as RISC processors. |
| 151 | |
| 152 | * Rely on advanced software engineering and modeling to implement all |
| 153 | these abstractions without penalizing performance: inlining, |
| 154 | conditional compilation, object oriented approach with function |
| 155 | pointers, preprocessor meta-programming, etc. |
| 156 | |
| 157 | * Iterate several times before finding the best solution, as needed. |
| 158 | It is unreasonable to believe one can solve an issue definitively and |
| 159 | freeze an abstraction API. Indeed, Linux kernel hackers |
| 160 | [http://lxr.linux.no/linux/Documentation/stable_api_nonsense.txt explain it clearly]. |
| 161 | |
| 162 | == How does MutekH compete with other embedded OSes? == |
| 163 | |
| 164 | There are certainly many other comparisons that could be done, and many |
| 165 | valuable kernel projects out there, but here are a few interesting facts: |
| 166 | |
| 167 | * MutekH is a free project, fundamental for public research, contrary |
| 168 | to !VxWorks or QNX. |
| 169 | |
| 170 | * MutekH provides native and classical support for shared memory multi-processor |
| 171 | platforms, in opposition to embedded kernels like RTEMS or FreeRTOS. |
| 172 | |
| 173 | * MutekH has a native support for processors heterogeneity. This is an |
| 174 | '''exclusive''' feature. |
| 175 | |
| 176 | == How does MutekH compete with other monolithic UNIX-kernels? == |
| 177 | |
| 178 | It probably doesn't compete and is quite different: |
| 179 | |
| 180 | * MutekH can run applications in kernel mode, without any |
| 181 | protection or syscall API: neither Linux, nor uCLinux, nor *BSD are designed |
| 182 | this way. |
| 183 | |
| 184 | * Exo-kernel approach enables implementation of syscall API via optional |
| 185 | "libOS", for example for Unix/Posix. Others can be considered and implemented, |
| 186 | such as L4 for instance. |
| 187 | |
| 188 | * Exo-kernel approach even allows to co-host kernel applications with |
| 189 | user applications. |
| 190 | |
| 191 | * MutekH is still a rather small kernel and is not intended to be used |
| 192 | on a workstation. This allows newcomers to get ready quickly, |
| 193 | and researchers to quickly validate |
| 194 | experimental concepts. This may not be the case for typical big kernels depending on research topic. |
| 195 | Even the original author of Linux kernel considers now, that his |
| 196 | project [http://news.cnet.com/8301-13505_3-10358024-16.html is getting bloated]. |
| 197 | |
| 198 | == Who can get involved in MutekH? == |
| 199 | |
| 200 | "Qui m'aime me suive !" (Let he who loves me follow me) |
| 201 | |
| 202 | Anyone with sufficient technical skills in System & C programming, |
| 203 | who likes collaborative work, is most welcome. |
| 204 | |
| 205 | == Where does original author choices come from? == |
| 206 | |
| 207 | My choice are certainly influenced by my experience in multiple areas. |
| 208 | Of course, I won't try to write my resume here but I'll still try to explain where |
| 209 | my ideas come from: |
| 210 | |
| 211 | * In the context of collaborative and open-source software |
| 212 | development, MutekH is not my first shot. I've authored several other |
| 213 | open source projects which sometimes still draw more external |
| 214 | contributors and users than MutekH. I know which causes produce which |
| 215 | effects in this kind of project management, because I experimented |
| 216 | myself and I also follow other projects' hazards. |
| 217 | |
| 218 | * In the specific frame of kernel development, this is not my first |
| 219 | shot either. In the past, I already implemented a OS for x86 which was |
| 220 | approximately the same size as MutekH's, wrote a few drivers and hacks for |
| 221 | Linux, wrote several significant patches for OpenBSD (nothing |
| 222 | published), and recently, I ported few other OSes such as RTEMS and eCos on the |
| 223 | SoCLib hardware simulator. All those achievements allowed me to experience kernel designs |
| 224 | more closely and thus to understand common criticisms and praises. |
| 225 | |
| 226 | * On a technical point of view, I pay close attention to every |
| 227 | advanced programming techniques which empower abstraction, extreme |
| 228 | factorization, generic programming and code reuse. I did not invent |
| 229 | anything in this area but I'm just trying to apply all these |
| 230 | rules which are described by software engineering research topics, but are |
| 231 | unfortunately way too much ignored by most developers. I have -- and will always |
| 232 | prefer to -- spent the same time writing generic and compact code rather |
| 233 | than writing several times the same code with small variations. In the |
| 234 | same way, I would rather rewrite a code several times for it to be |
| 235 | finally generic than modify it each time I need a variant. It's the |
| 236 | insurance of settling problems on the long run, despite leaving |
| 237 | beginners on the side. The source code must come out crystal-clear for |
| 238 | any qualified developer. |
| 239 | |
| 240 | * More generally and to insure the generic behavior of implemented |
| 241 | solutions, core developers and I take time to query others' thoughts |
| 242 | and advices. We always try to give the maximum latitude to change proposals, |
| 243 | even significant ones. |