One of the great things about natural language, is that we can create new words, in order to arrive at more fine grained meaning. I personally can appreciate a difference between a compiler that takes source code in one language and generates source code in another high level language, and a compiler that takes a source file outputs a binary.
Granted, there are a lot of situations where there is no need to make a distinction, but that's not always the case.
An analogy might be the use of the words car and taxi. Cars and Taxis are both vehicles. In fact, a taxi is often a car.
In some situations, I might say "I went there by car" - and that would be sufficient. But if the situation demanded I express the fact that the car that I traveled in was a taxi, I would say "I went there by taxi" (Not "I went there by a car that is owned by a freelance driver who charges by the kilometer")
Granted, there are a lot of situations where there is no need to make a distinction, but that's not always the case.
An analogy might be the use of the words car and taxi. Cars and Taxis are both vehicles. In fact, a taxi is often a car.
In some situations, I might say "I went there by car" - and that would be sufficient. But if the situation demanded I express the fact that the car that I traveled in was a taxi, I would say "I went there by taxi" (Not "I went there by a car that is owned by a freelance driver who charges by the kilometer")