| # Use of Python |
| |
| Meson is implemented in Python. This has both positive and negative |
| sides. The main thing people seem to be mindful about is the |
| dependency on Python to build source code. This page discusses various |
| aspects of this problem. |
| |
| # Dependency hell |
| |
| There have been many Python programs that are difficult to maintain on |
| multiple platforms. The reasons come mostly from dependencies. The |
| program may use dependencies that are hard to compile on certain |
| platforms, are outdated, conflict with other dependencies, not |
| available on a given Python version and so on. |
| |
| Meson avoids dependency problems with one simple rule: Meson is not |
| allowed to have any dependencies outside the Python basic library. The |
| only thing you need is Python 3 (and possibly Ninja). |
| |
| ## Reimplementability |
| |
| Meson has been designed in such a way that the implementation language |
| is never exposed in the build definitions. This makes it possible (and |
| maybe even easy) to reimplement Meson in any other programming |
| language. There are currently no plans to reimplement Meson, but we |
| will make sure that Python is not exposed inside the build |
| definitions. |
| |
| ## Cross platform tooling |
| |
| There is no one technical solution or programming language that works |
| natively on all operating systems currently in use. When Autotools was |
| designed in the late 80s, Unix shell was available pretty much |
| anywhere. This is no longer the case. |
| |
| It is also the case that as any project gets larger, sooner or later |
| it requires code generation, scripting or other tooling. This seems to |
| be inevitable. Because there is no scripting language that would be |
| available everywhere, these tools either need to be rewritten for each |
| platform (which is a lot of work and is prone to errors) or the |
| project needs to take a dependency on _something_. |
| |
| Any project that uses Meson (at least the current version) can rely on |
| the fact that Python 3 will always be available, because you can't |
| compile the project without it. All tooling can then be done in Python |
| 3 with the knowledge that it will run on any platform without any |
| extra dependencies (modulo the usual porting work). This reduces |
| maintenance effort on multiplatform projects by a fair margin. |