В вакансиях регулярно пишут про связку C# и линукс, т.е. много где переходят на c#, даже в гос. подрядах.
Сейчас уже вполне классическая связка для компаний это Astra Linux и .net (C#).
Мотивируют это тем, что он типа открыт (open source). В отличие от той же оракловской явы.
Но вот коллега Эйнсток Файр пишет, что нифига подобного:
1)
Никакие они не открытые.
Бутстраппинг компилятора нельзя провести без его бинарной версии,
которая поставляется Микрсофтом.
В общем, открыт C# или нет? Можно будет собрать компилятор из открытых исходников или для этого
нужен недоступный бинарь от мс? Что-то я запутался. Как сейчас дела обстоят?
Здравствуйте, Sharov, Вы писали:
S>В общем, открыт C# или нет? Можно будет собрать компилятор из открытых исходников или для этого S>нужен недоступный бинарь от мс? Что-то я запутался. Как сейчас дела обстоят?
— компилятор открыт, но его исходники написаны на C# и VB.NET. А чтобы их скомпилировать, нужен другой какой-то компилятор, но где его взять, если вы хотите использовать все изначально открытое?
Здравствуйте, Sharov, Вы писали:
S>В отличие от той же оракловской явы.
Ерунда какая-то. Оракловская ява — это OpenJDK (который полностью открыт) плюс официальная поддержка от Oracle. Плюс есть есть несколько имплементаций и сборок от разных вендоров, даже есть что-то российское с сертификатами https://astralinux.ru/ready-for-software/liberica-jdk/
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Sharov, Вы писали:
S>Открыт .net или закрыт?
Открыт.
S>Но вот коллега Эйнсток Файр пишет, что нифига подобного: S>
S>Никакие они не открытые.
S>Бутстраппинг компилятора нельзя провести без его бинарной версии,
S>которая поставляется Микрсофтом.
Для того, чтобы иметь возможность быть включёнными в дистрибутивы Linux (которые требуют возможность скомпилировать всё с нуля из исходников), Microsoft заэкранировали исходники в Virtual Monolithic Repository.
Goals of the Virtual Monolithic Repository
Fulfill requirements of .NET distro builders such as RedHat or Canonical to natively include .NET in their distribution repositories.
— https://github.com/dotnet/announcements/issues/241
Грубо говоря, процесс выглядит как-то так: с помощью поставляемого через SDK компилятора C# ты компилируешь компилятор C# из исходников, потом этим самостоятельно собранным компилятором C# ты компилируешь весь дотнет включая опять же компилятор C#.
Здравствуйте, Sharov, Вы писали:
S>В вакансиях регулярно пишут про связку C# и линукс, т.е. много где переходят на c#, даже в гос. подрядах. S>Сейчас уже вполне классическая связка для компаний это Astra Linux и .net (C#).
Учитывая, что есть даже .NET 3.1 под Эльбрусы: https://www.altlinux.org/%D0%AD%D0%BB%D1%8C%D0%B1%D1%80%D1%83%D1%81/dotnet
думаю, что всё же открытый.
Я за все годы объявленного импортозамещения так и не увидел официальных рекомендаций по инструментам.
Даже сейчас до смешного доходит в рамках одной организации.
На совещании по одному проекту рассматривают всякие Java, Ruby , ещё что-то там, а C# отметают со словами, что это же Майкрософт (люди банально не знают, что давно есть рантайм под Linux и не прибито всё к винде).
Параллельно с этим другой проект переводится с ASP .NET на ASP .NET Core и соответственно с .NET Framework на .NET
(не представляю как его можно перевести за год с C# на Java или ещё что, т.к. даже внутри языка этот переход достаточно болезненно проходит).
Q> с помощью поставляемого через SDK компилятора C# ты компилируешь компилятор C# из исходников, потом этим самостоятельно собранным компилятором C# ты компилируешь весь дотнет включая опять же компилятор C#.
Это ничего не гарантирует. В исходном бинарнике компилятора может быть зловред, он будет попадать во все следующие собираемые компиляторы, и бинарно всё будет совпадать.
То есть недостататочно побайтового сравнения результата компиляции. Требуется полный анализ бинарного кода.
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>...он будет попадать во все следующие собираемые компиляторы
Именно компиляторы, или любые производимые бинарники? Он как-то должен детектить, что сбираемая программа — компилятор?
ЭФ>Никакие они не открытые.
Для любого уважающего себя языка хорошим тоном считается писать компилятор на этом же языке. То есть эта процедура [1] — везде одинаковая. По-твоему, никакие языки не открытые?
Q> Именно компиляторы, или любые производимые бинарники? Он как-то должен детектить, что сбираемая программа — компилятор?
Он может делать всё что посчитает нужным. Например конкретно в компиляторы вставляться целиком, а в подходящие программы — частями.
Ты, наверное думаешь, что "я поменяю чуть-чуть, он не задетектит и целиком не вставится". Но гарантий никаких нет.
Как только ты что-то поменяешь, получится другой бинарник и несовпадение его по байтам уже ничего не будет ни опровергать ни доказывать.
ЭФ>>Никакие они не открытые.
Q> эта процедура [1] — везде одинаковая. По-твоему, никакие языки не открытые?
можно сделать всю цепочку из исходников,
нижний уровень которой — загрузчик байтов, который вводится с текстового дампа байтов для памяти и байты должны верифицироваться вручную.
(профит здесь в том, что новые версии компилятора не будут менять текст/дамп загрузчика, и его не надо повторно верифицировать)
А если такого нет, то тебе/вам придётся каждую новую версию бинарного компилятора, выкладываемого Микрософтом,
перепроверять по-новой перед использованием.
Про какие компиляторы вы говорите? Про MSIL? Есть JIT и CoreRT
Есть среда выполнения с Jit-ом вот она то и интересна. MSIL можешь проанализировать как и декомпилировать
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>То есть недостататочно побайтового сравнения результата компиляции. Требуется полный анализ бинарного кода.
И такая проверка довольно тривиальна. А теперь подумай, если такое вдруг вскроется, то это будут такие репутационные потери для майкрософт, что возможно даже на .net можно будет ставить крест. Вот оно им надо страдать такой фигнёй, абсолютно ненадёжной по сокрытию следов, сомнительной в части профита и ужасающе разрушительной по последствиям?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>Это ничего не гарантирует. В исходном бинарнике компилятора может быть зловред, он будет попадать во все следующие собираемые компиляторы, и бинарно всё будет совпадать. ЭФ>То есть недостататочно побайтового сравнения результата компиляции. Требуется полный анализ бинарного кода.
Как ты в ширинку-то рукой залазишь так смело — вдруг там шпион??
Маразм крепчал...
Здравствуйте, Qbit86, Вы писали:
Q>Грубо говоря, процесс выглядит как-то так: с помощью поставляемого через SDK компилятора C# ты компилируешь компилятор C# из исходников, потом этим самостоятельно собранным компилятором C# ты компилируешь весь дотнет включая опять же компилятор C#.
Для совсем конченых параноиков (в самом плохом смысле, но котрые считают себя очень умными и въедливыми) есть простой рецепт: поставляется набор:
1. Сорсы минимально необходимого компилятора МНК_сорсы
2. Бинарь МНК
Сорсы проверяются параноиками. Затем МНК канпеляет МНК_сорсы и получает МНК2, который сравнивается с МНК. Если всё совпало — бинарь соответствует сорсам. А далее уже при помощи МНК канпеляется последняя версия компилятора.
Хотя у меня всё ещё большие сомнения, так ли уж открыт дотнет. В нём громадная куча сорсов, причём прибитая к венде. Неужели кто-то прям открыл сорсы 2012 года и сказал "на те, нам не жалко!" Нет, конечно! Как всегда найдутся тухлые отмазки "ну мы типа опенсорсим, только не всё ". А нахрен нам "не всё"?? В нём просто нет смысла — проще Немерлю взять, она гарантированно ВСЯ открытая.
B> МНК2, который сравнивается с МНК. Если всё совпало — бинарь соответствует сорсам.
Нет. В этом утверждении логическая ошибка. И был proof of concept компилятора который её демонстрирует.
Это если сравнение по контрольной сумме и размеру. Да даже и если побайтное сравнение — всё равно.
Нужно знать, что именно байты делают не анализом исходников, а анализом бинарника.
Здравствуйте, Эйнсток Файр, Вы писали:
IT>> подумай, если такое вдруг вскроется, то это будут такие репутационные потери для майкрософт, что возможно даже на .net можно будет ставить крест
ЭФ>Это так себе аргумент. Ведь не обязательно зловреда вставлять прямо сейчас, это можно будет сделать позже, когда будет нужно.
А хоть какому-то open-source ты доверяешь?
Ну напр. компилятору gcc последней версии, который был скомпилирован компилятором предыдущей версии и т.д. до 1-й версии компилятора?
. Он, в принципе, совпадает с тем, что говорит baiker,
но почему-то Baiker не понимает, что Microsoft этот подход не реализовал.
> Ну напр. компилятору gcc последней версии, который был скомпилирован компилятором предыдущей версии и т.д. до 1-й версии компилятора?
В случае с Си есть компиляторы различных производителей. Можно брать компилятор ФСБ и ничего не боятся.
Можно последовательно прокомпилировать компиляторами разных производителей и снизить вероятность того, что они все сговорились.
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>В случае с Си есть компиляторы различных производителей. Можно брать компилятор ФСБ и ничего не боятся.
Т.е. некоторое доверие таки есть?
ЭФ>Можно последовательно прокомпилировать компиляторами разных проиизводителей и снизить вероятность того, что они все сговорились.
Как будешь проверять?
ЭФ>С C# так не выйдет.
Mono?
ps: ну и как IT уже сказал, проверка managed кода существенно проще нативного, и его анализ на предмет зловредов вряд-ли сильно сложнее анализа исходников.
Это другое! Microsoft — вражеская компания под управлением вражеского правительства и вражеских спецслужб.
Странно было бы не принимать это во внимание.