Just to add about the original comment “but it’s hard to find one for Linux that doesn’t just delete every 2 point”

I’m using gpsbabel with the crosstrack filter :
http://www.gpsbabel.org/htmldoc-development/filter_simplify.html

As I understand the Douglas Peucker algorithm, it’s exactly what is described in the gpsbabel filter.
Plus you are able not only to give the number of points wanted but also the max lenght distance error introduced by removing a point, wich is more convenient when your gpx track as an unknown shape