Every mathematical-programming project eventually asks the same question: which solver? For linear programming (LP) and mixed-integer programming (MIP), the open-source field has consolidated dramatically, and the honest answer in 2026 is shorter than it used to be. This page maps the open-source solver landscape, what each engine is actually good at, and the point at which a commercial license starts paying for itself.
HiGHS
is the current default recommendation for both LP and MIP. It implements a high-performance dual simplex, an interior-point method for large LPs, and a competitive branch-and-cut MIP solver. It is MIT-licensed, actively developed at the University of Edinburgh, and has displaced older engines as the bundled solver in SciPy (scipy.optimize.linprog and milp), Pyomo, PuLP, and JuMP.
Practical notes:
highspy), C, Julia, and Rust bindings, so you can use it without a modeling layer if you want minimal dependencies.If you are starting a new project and need LP or MILP, start with HiGHS and only look elsewhere when it demonstrably fails you.
CBC (COIN-OR Branch and Cut) was the workhorse open-source MIP solver for two decades and remains the default in older PuLP installations. It is EPL-licensed and battle-tested, but development has slowed and HiGHS beats it on most modern benchmarks, sometimes by an order of magnitude on harder MIPs. The wider COIN-OR ecosystem still matters: CLP (the LP engine under CBC), Ipopt (nonlinear interior-point — still the standard open-source NLP solver), and Bonmin/Couenne for mixed-integer nonlinear problems have no equally mature open-source replacements.
Reach for CBC when you are maintaining an existing system built on it; reach for Ipopt whenever the problem is smooth and nonlinear.
SCIP (Solving Constraint Integer Programs) from Zuse Institute Berlin is the most powerful open-source framework for constraint integer programming — MIP plus constraint-programming-style global constraints, nonlinear terms, and pseudo-Boolean structures. Since 2022 it ships under the Apache 2.0 license, removing the old academic-only restriction.
SCIP's distinguishing feature is not raw speed on vanilla MILP (HiGHS often matches or beats it there) but extensibility: you can write custom branching rules, cutting-plane separators, primal heuristics, and constraint handlers as plugins. If your problem has structure that a generic solver cannot exploit — column generation, branch-and-price, combinatorial cuts — SCIP (with its GCG extension) is the open-source platform to build on. The PySCIPOpt bindings are mature.
GLPK (GNU Linear Programming Kit) appears in countless tutorials because it has been packaged everywhere since the late 1990s. Its simplex is acceptable for small LPs, but its MIP performance is one to three orders of magnitude behind HiGHS on nontrivial instances. There is no reason to select GLPK for new work; treat its presence in a stack as a modernization opportunity.
General MIP is not always the right hammer. Google's CP-SAT (part of OR-Tools) is a lazy-clause-generation constraint solver that dominates on scheduling, timetabling, and tightly combinatorial feasibility problems where MIP relaxations are weak. MiniZinc provides a solver-independent modeling language that can target CP-SAT, Gecode, Chuffed, and MIP backends from a single model — useful for comparing paradigms before committing. For pure feasibility with heavy logical structure, modern SAT/SMT solvers (Kissat, Z3) can outperform both.
Gurobi, CPLEX, Xpress, and the rising COPT remain meaningfully faster on hard MIPs — with better numerical robustness, presolve, and support. The full market — vendors, licensing models, and what the money actually buys — is covered in Commercial MIP Solvers. The decision is economic:
The Mittelmann benchmarks are the standard public comparison and useful directional evidence — HiGHS's rise is visible there — though their coverage narrowed after Gurobi's 2024 withdrawal from the public tables. Solver performance is notoriously instance-dependent: performance variability of 2–10x from permuting rows or changing a random seed is documented behavior. Before choosing, run each candidate on 20–50 of your own representative instances with your real time limits, and compare distributions rather than means — the full method, metrics, and tuning levers are in MIP Solver Benchmarking and Tuning, and the operational side in Running Optimization Models in Production.