AbstractResearch on preventative rail maintenance to date majors on small or artificial problem instances, not applicable to real‐world use cases. This article tackles large, real‐world rail maintenance scheduling problems. Maintenance costs and availability of the infrastructure need to be optimized, while adhering to a set of complex constraints. We develop and compare three generic approaches: an evolution strategy, a greedy metaheuristic, and a hybrid of the two. As a case study, we schedule major preventive maintenance of a full year in the complete rail infrastructure of the Netherlands, one of the busiest rail networks of Europe. Empirical results on two real‐world datasets show the hybrid approach delivers high‐quality schedules.