Может быть тогда все же CIL компилируется в код для операционной системы, которая уже занимается окончательным его переводом в машинный код для процессора?
Нет такого понятия
код для операционной системы
. Операционная система -- точно такая же программа (в реальности -- комплекс программ), как и все остальные.
если CIL действительно компилируется в машинный код, который уходит непосредственно процессору на исполнение, то зачем указывать список целевых операционных систем?
CIL транслируется в машинный код рантаймом (например, моно) в момент непосредственно перед исполнением. И если рантайм не умеет работать на определенной ос, то и CIL там не заработает.
Т.о., при проектировании программы Вам необходимо знать, на каких ОС есть рабочий рантайм. Также, если Вы обращаетесь к сервисам ОС (неявно, через обертки .net, предоставляемые BCL, или явно -- через DllImport), Вам нужно знать, на какой ОС будет выполняться Ваше приложение, дабы учитывать возможности ОС.