The Varnish Developers Guide¶
This is the deliberately short and to the point list of things Varnish Developers should know.
Behaviour¶
Be sensible.
If in doubt, think.
If still in doubt, ask.
Admit your mistakes, it’s faster that way.
Thou SHALL not paint bikesheds.
We will toss you out of the project rather than add another rule.
Technical stuff¶
Our coding style guideline is FreeBSD’s style(9)
See autogen.des script for developer options to the toolchain.
We always -Werror, there are no harmless warnings, only source code that does not express intent well enough.
We prefer the source code, rather than the comments explain what is going on, that way tools like FlexeLint and Coverity also gets a chance.
Our reference platforms are Ubuntu and FreeBSD.
Asserts have negative cost, they save developer time next time around.
Our license is BSD 2-clause or looser, no GPL or LGPL.
It took 11 years for the first major security issue, and that was too soon.
Bugs, issues, feature requests & VIPs¶
Bugs, issues and feature requests start out as github issues.
Monday at 13:00-14:00 (EU time) we “bug-wash” on IRC to decide who and how issues are dealt with.
Issues we cannot do anything about are closed.
If feature-requests make sense, they get moved to a wiki/VIP page until somebody implements them.
Varnishtest cases for bugs is the norm, not the exception.
Architectural stuff¶
These rules are imported from the X11 project:
It is as important to decide what a system is not as to decide what it is.
Do not serve all the world’s needs; rather, make the system extensible so that additional needs can be met in an upwardly compatible fashion.
The only thing worse than generalizing from one example is generalizing from no examples at all.
If a problem is not completely understood, it is probably best to provide no solution at all.
If you can get 90 percent of the desired effect for 10 percent of the work, use the simpler solution.
Isolate complexity as much as possible.
Provide mechanism, rather than policy.
Bundling VMODs with the Varnish distribution¶
Decisions about whether to add a new Varnish module (VMOD) to those bundled with Varnish are guided by these criteria.
The VMOD is known to be in widespread use and in high demand for common use cases.
Or, if the VMOD is relatively new, it provides compelling features that the developer group agrees will be a valuable enhancement for the project.
The VMOD does not create dependencies on additional external libraries. VMODs that are “glue” for a library come from third parties.
We don’t want to add new burdens of dependency and compatibility to the project.
We don’t want to force Varnish deployments to install more than admins explicitly choose to install.
The VMOD code follows project conventions (passes make distcheck, follows source code style, and so forth).
A pull request can demonstrate that this is the case (after any necessary fixups).
The developer group commits to maintaining the code for the long run (so there will have to be a consensus that we’re comfortable with it).