Не лучше ли было бы Google принять C # в качестве основы для языка разработки операционной системы Android и .NET для ее среды выполнения? Команда Mono решила выяснить это с помощью небольшого эксперимента. Они сделали преобразование.
Прежде чем вы начнете представлять, сколько человеко-часов потребуется на преобразование системы Android на C #, стоит сказать, что это был автоматический перенос.
Также обратите внимание, что код Linux, который составляет основную часть операционной системы, не был задействован. Это просто перенос подсистем Java на C #. Для перевода использовался Sharpen, плагин Eclipse, который переводит проект Java на C #, и в этом случае для преобразования пришлось столкнуться с более чем миллионом строк кода Java.
Проект под названием XobotOS позволял преобразованному коду работать на виртуальной машине Mono, а не на виртуальной машине Dalvik, встроенной в Android. Похоже, основное предположение о том, что виртуальная машина .NET будет быстрее, чем относительно молодая виртуальная машина Dalvik, оказалось верным.
Вы можете скачать XobotOS и улучшенный инструмент Sharpen с GitHub.
Итак, было бы Google лучше использовать .NET, чем Java? Обычно считается, что .NET является более «опасной» средой с точки зрения судебных исков, чем Java, но, как отмечает Мигель де Икаса в записи блога:
В отличие от Sun с Java, Microsoft представила C # и виртуальную машину .NET для стандартизации в ECMA и увидела, что эти стандарты полностью соответствуют строгим патентным обязательствам ISO. На платформу .NET также распространяется юридически обязательное обещание сообщества Microsoft.
Однако многие в сообществе открытого исходного кода очень подозрительно относятся к «обещанию сообщества», которое не раздает никаких патентных прав. Многие опасаются, что, если в каком-либо проекте технология .NET будет эффективно использоваться, Microsoft пересмотрит свою позицию и захочет получить кусок пирога. Как оказалось, Google не лучше было пойти на Java и противостоять Oracle.
Один интересный момент заключается в том, что с возрастающим предпочтением Microsoft C ++ и неуправляемому коду существует реальная вероятность того, что ей действительно все равно, как .NET используется в других системах. Как бы то ни было, Mono быстро становится единственным чемпионом, оставшимся после более широкой технологии .NET.
Увидим ли мы упакованную и доработанную версию XobotOS, возможно, как часть предложения Mono для Android?
Это кажется маловероятным, поскольку для этого потребуется полное изменение или дополнение системного программного обеспечения телефона. Даже если это быстрее и приводит к меньшему расходу заряда батареи, идея сделать такое же масштабное изменение, как Java, на C # — серьезная задача. Часть кода вполне может попасть в Mono для Android и iOS.
Как говорит Мигель де Икаса:
«Проект, который мы начали, потому что мы думали, что это будет весело, оказался очень полезным для наших продуктов. Для стартапа важно оставаться сосредоточенным, но иногда нужно попробовать что-то безумное, чтобы добиться прогресса. И кто? знает, может быть, Google когда-нибудь нас поблагодарит »
Последний вопрос — об авторском праве и патентах. Если Google проиграет судебный процесс и Oracle получит авторские права на Java API и исходный код, как это повлияет на версию C #, которая была просто получена путем компиляции оригинальной Android Java в C #? Я не юрист, но почему-то не думаю, что можно избежать проблем, просто перекомпилировав код. Если повторная реализация в чистом помещении не избавит вас от ответственности, то и перекомпиляция исходного кода не поможет. Поэтому я сомневаюсь, что Мигель скоро получит известие от Google, но звонок из Oracle кажется слишком вероятным.