|
| 1 | +Why another build system? |
| 2 | +========================= |
| 3 | + |
| 4 | +There are a lot of build systems out there with existing communities who accumulated a |
| 5 | +lot of experience over time. So why go through the hassle of creating another build |
| 6 | +system? |
| 7 | + |
| 8 | +One reason was pure curiosity. `Waf <https://waf.io>`_ has been used for some time as a |
| 9 | +build system for research projects. Although, it has several limitations (difficult |
| 10 | +interface, no debugging, cryptic error messages, a bus factor of one), it is also a |
| 11 | +mature library. At some point annoyance won over comfort and I (`@tobiasraabe |
| 12 | +<https://github.com/tobiasraabe>`_) started to write pytask. |
| 13 | + |
| 14 | +Another reason is that pytask is created having a particular audience in mind. Many |
| 15 | +researchers are not computer scientists first, but acquired some programming skills |
| 16 | +throughout their careers. This means a build system must be extremely user-friendly or |
| 17 | +provide a `steep learning curve <https://english.stackexchange.com/a/6226>`_, because it |
| 18 | +is only a tool. Since pytask resembles pytest in some ways, users have an easier time |
| 19 | +switching to pytask and feel more comfortable. |
| 20 | + |
| 21 | +The third reason is that pytest seems to provide the ideal architecture for a build |
| 22 | +system. Its plugin-based design allows for customization at every level. A build system |
| 23 | +is a tool which can be deployed in many different environments whose requirements are |
| 24 | +not foreseeable by the developer. If it is easy for users / developers to write plugins |
| 25 | +which extend the functionality of pytask it is more valuable. If there is any question |
| 26 | +whether pytest's architecture is really suited for this, one should look at the success |
| 27 | +of pytest, its wide-spread adoption, and its over 800 plugins (even if most of them |
| 28 | +might be dead). |
| 29 | + |
| 30 | + |
| 31 | +Alternatives |
| 32 | +------------ |
| 33 | + |
| 34 | +Here is a list of other build systems and their advantages and disadvantages compared to |
| 35 | +pytask. The list helps to define pytask's niche and to collect new ideas to improve |
| 36 | +pytask. |
| 37 | + |
| 38 | + |
| 39 | +`snakemake <https://github.com/snakemake/snakemake>`_ |
| 40 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 41 | + |
| 42 | +Pros |
| 43 | + |
| 44 | +- Mature library. |
| 45 | +- Is the build system for some research projects. |
| 46 | +- Can scale to clusters and use Docker images. |
| 47 | +- Supports Python and R. |
| 48 | + |
| 49 | +Cons |
| 50 | + |
| 51 | +- Need to learn snakemake's syntax which is a mixture of Make and Python. |
| 52 | +- Seems to have no plugin system. |
| 53 | + |
| 54 | + |
| 55 | +`Waf <https://waf.io>`_ |
| 56 | +~~~~~~~~~~~~~~~~~~~~~~~ |
| 57 | + |
| 58 | +Pros |
| 59 | + |
| 60 | +- Mature library. |
| 61 | +- Can be extended. |
| 62 | + |
| 63 | +Cons |
| 64 | + |
| 65 | +- Focus on compiling binaries. |
| 66 | +- Bus factor of 1. |
| 67 | + |
| 68 | + |
| 69 | +`Scons <https://github.com/SCons/scons>`_ |
| 70 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 71 | + |
| 72 | +Pros |
| 73 | + |
| 74 | +- Mature library. |
| 75 | + |
| 76 | +Cons |
| 77 | + |
| 78 | +- Seems to have no plugin system. |
| 79 | + |
| 80 | + |
| 81 | +`cook <https://github.com/jachris/cook>`_ |
| 82 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 83 | + |
| 84 | +Pros |
| 85 | + |
| 86 | +- Still simple, maybe useful for some quick inspirations. |
| 87 | + |
| 88 | +Cons |
| 89 | + |
| 90 | +- Development is paused. |
| 91 | +- No plugin system, but extensible interfaces. |
0 commit comments