* The next layer would be either a concrete output implementation, like Windows MIDI or ALSA for MIDI, or some sub-typ, for example MIDI usually comes in either MT-32 MIDI or General MIDI (or both!). Here would be thought required to determine what would be the best solution. For example some games might just support MT-32 MIDI or General MIDI, thus this might be a first layer type. So if you plan to take this task, you will still have a lot of research to do, to find the best separation :-).
The exact same
layer should also be visible in the GUI configuration later on to allow for a much more user friendly output configuration. The user might additionally configure a concrete output like ALSA to use a specific port though. See the [[OpenTasks#MIDI_device_configuration|MIDI_device_configuration]] task for more information about this. (Note that it would probably best to tackle both tasks in a single Google Summer of Code project!).
Of course this is not set in stone yet, if you have some other great idea how to tackle this, we are happy for your feedback :-).