| Contributing to iPXE | |
| ==================== | |
| Thank you for wanting to help to improve iPXE! Your contributions can | |
| help to make the software better for everyone. | |
| iPXE is [licensed][licence] under the GNU GPL and is 100% open source | |
| software. There are no "premium edition" versions, no in-app | |
| advertisements, no hidden costs. The version that you get to download | |
| and use forever for free is the definitive and only version of the | |
| software. | |
| There are several ways in which you can contribute: | |
| Bug reports | |
| ----------- | |
| Good quality [bug reports][issues] are always extremely welcome. | |
| Please describe exactly what you are trying to achieve, and the exact | |
| problem that you are encountering. Include a screenshot or a | |
| transcription of the output from iPXE (including the exact text of any | |
| error messages). | |
| If you are not sure whether or not your issue is due to a bug in iPXE, | |
| please consider creating a [discussion][discussions] instead of an | |
| issue. | |
| Bug fix pull requests | |
| --------------------- | |
| Short and simple [pull requests][pulls] that fix a known [bug][issues] | |
| are always welcome. Please ensure that your pull request allows | |
| maintainer edits, since there is a 99% chance that it will need to be | |
| rebased, reworded, or otherwise modified before being merged. | |
| Minor feature pull requests | |
| --------------------------- | |
| A small [pull request][pulls] that adds a very minor feature has some | |
| chance of being merged. | |
| As a bootloader, iPXE is an unusual programming environment: code size | |
| is extremely small (measured in bytes or kilobytes), you absolutely | |
| cannot use any external libraries, heap size is very limited and you | |
| should expect memory allocations to fail, various operations may not | |
| be used in some contexts (e.g. on network fast paths), and cooperative | |
| multitasking is implemented using event-driven non-blocking object | |
| interfaces. You will need to be aware of external interoperability | |
| requirements and firmware quirks dating back to the 1990s. | |
| In most cases, an [issue report][issues] describing the desired | |
| feature is likely to get a better result than an unsolicited pull | |
| request. | |
| Major feature pull requests | |
| --------------------------- | |
| A large [pull request][pulls] that adds a substantial new feature | |
| (e.g. a new device driver, a new cryptographic algorithm, a new script | |
| command, etc) has very little chance of being merged unless an | |
| appropriate level of [funding][funding] is provided to cover the time | |
| required for several rounds of code review. | |
| Please be aware that thorough code review is generally **more work** | |
| than code creation. The cost to review a major feature will therefore | |
| generally be more expensive than the cost of simply [funding][funding] | |
| the development of the feature instead. | |
| Any externally developed features are **not eligible** to be signed | |
| for UEFI Secure Boot, and will be automatically excluded from all | |
| Secure Boot builds of iPXE. | |
| Funding | |
| ------- | |
| Small donations from individual users via [GitHub Sponsors][sponsors] | |
| are always welcome, and help to purchase the coffee that forms the raw | |
| material from which iPXE is made. | |
| Around half of the development work on iPXE is commercially funded. | |
| Any code that is commercially funded will be pushed to the public iPXE | |
| repository and made immediately available to everyone under the terms | |
| of the GNU GPL. Funded development has included many widely used | |
| features: | |
| * Support for 64-bit CPUs | |
| * Support for UEFI firmware | |
| * Support for USB NICs | |
| * Support for the Intel 10GbE, 40GbE, and 100GbE NICs | |
| * Support for [iSCSI and other SAN booting methods][sanboot] | |
| * Support for [TLS and HTTPS][crypto] | |
| * Support for [AWS EC2][ec2] and [Google Cloud][gce] public clouds | |
| As noted above, funding the development of a major feature is | |
| generally cheaper than developing it yourself and then funding the | |
| code review to get it fixed up and merged. | |
| Any funded development work is automatically eligible to be signed for | |
| UEFI Secure Boot. | |
| To discuss funding an iPXE development, please send an email to | |
| <vendor-support@ipxe.org>, or create an [issue][issues] and mention | |
| that you would be interested in providing funding. | |
| (Ab)use of AI | |
| ------------- | |
| Please do not send any AI-generated issue reports or pull requests. | |
| You are very welcome to use AI to help you understand the issue that | |
| you are experiencing but do not, under any circumstances, submit text | |
| or code that an AI has generated. | |
| A limited exception to this blanket prohibition exists for reporting | |
| potential security vulnerabilities, as documented in the [security | |
| policy](SECURITY.md). | |
| Any other AI-generated submissions will result in the submitting user | |
| being instantly and permanently banned from interacting with this or | |
| any related projects. There will be no additional warnings, and there | |
| is no way to appeal against this ban. | |
| [crypto]: https://ipxe.org/crypto | |
| [discussions]: https://github.com/ipxe/ipxe/discussions | |
| [ec2]: https://ipxe.org/howto/ec2 | |
| [funding]: #funding | |
| [gce]: https://ipxe.org/howto/gce | |
| [issues]: https://github.com/ipxe/ipxe/issues | |
| [licence]: COPYING | |
| [pulls]: https://github.com/ipxe/ipxe/pulls | |
| [sanboot]: https://ipxe.org/cmd/sanboot | |
| [sponsors]: https://github.com/sponsors/ipxe |