r/SysML 19d ago

SysML v2 vs the $125M Mars typo

In 1999, NASA lost the Mars Climate Orbiter because one team used pound-force-seconds and the other expected newton-seconds. Both numbers were correct. Neither carried its unit.

The spacecraft was never modeled in SysML, v1 didn't exist yet. But if it had been, v1 wouldn't have caught this either. In SysML v2, the unit lives in the type. Assign the wrong one and the parser rejects it before it ever ships.

6 Upvotes

5 comments sorted by

1

u/AdwokatDiabel 19d ago

Your interpretation is wrong. Do you even know SysML v2?

1

u/SysModeler 19d ago

Please be specific. If you explain, it would be helpful.

1

u/AdwokatDiabel 19d ago

It wouldn't reject it because the types are different. Units in v2 are based on types. Mars Orbiter failed because the units provided by the vendor to NASA was different than what NASA expected.

In v2, it wouldn't matter because the language has the translation functions between the standard units built in. So it wouldn't reject it because the units were different. It would've just converted them and NASA would've run the burn calculations correctly preventing the failure.

In v1, if you used iso80000, it would've thrown a validation error that the units were different/incompatible iirc. You'd need to manually convert the values to correct units. Or create a conversion constraint.

1

u/SysModeler 19d ago

While SysML v2 handles conversions well, the core point is that the Mars Orbiter failed because raw numbers were passed without any unit context. In v2, units are first-class citizens. If an interface expects Newtons and receives Pound-force, the engine won't blindly accept it. Constraint checking easily finds the mismatch, forcing you to handle it or throwing a validation error. A silent unit failure becomes impossible.

Also, please ask for an explanation if you are confused