.NET Core: релізу не буде, але ви тримайтеся, здоров'я вам, гарного настрою

Пост про те як не треба вести розробку фреймворків, і про те, чому життєвий цикл програмного забезпечення це не порожні слова, особливо, якщо на вас покладаються мільйони розробників по всьому світу. Далі слід критика підходу до розробки платформи .NET Core, і, тісно пов'язаного з ним фреймворку, ASP.NET Core.

Історія версій .NET Core (жарт з просторів Інтернету):
* Alpha
* Beta
* RC1
* 2RC 2Furious
* RC: Tokyo Drift
* RC4: The Big RC
* 7
* RC8

Передісторія
vNext — кодове ім'я для нового покоління ASP.NET, яке використовувалося досить тривалий час, поки фреймворк не отримав порядковий номер і не став називатися ASP.NET 5 (пізніше відомий як ASP.NET Core). Якщо до цього розвиток ASP.NET йшло планомірно, в основному, без проблем із зворотною сумісністю, то нова версія стала справжньою революцією. По суті це новий фреймворк. Однією з цілей тотального переписування було досягнення модульності, що, зокрема, дозволило відв'язати .NET від платформи Windows. Це потім стало приводом для низки гучних анонсів про підтримку Linux і OS X.
Треба сказати, що новий фреймворк вийшов дуже приємним: канув в лету монструозний System.Web, а MVC і Web API частини злилися в одне ціле. Крім того, рантайм і бібліотеки були розбиті на дрібні частини (типова інсталяція веб-додатки разом з усіма залежностями тепер займала менше 50 мегабайт, проти колишніх 500 МБ повній версії .NET Framework). Підтримка Linux — взагалі окрема розмова. Офіційний образ для Docker, запуск додатків в два кліка на серверах будь-якого хмарного хостинг провайдера — то про що, до цього .NET програмістам можна було тільки мріяти.
Але не все було гладко. Нова платформа вийшла несумісною не тільки на рівні ASP.NET, змінився сам .NET Framework. По суті, з'явилося два незалежні напрямки: CoreCLR і "старий" .NET версії 4.x. Портування між цими фреймворками виявилося нетривіальним завданням для великої кількості бібліотек, автори яких, природно, стали висловлювати своє невдоволення. Але, за великим рахунком, Microsoft тоді легко відбувся — люди погомоніли трохи, і заспокоїлися. В якості тренування уяви, можна уявити собі ріки крові, які потекли б у випадку, якщо крім основної версії Java з'явилася б яка-небудь несумісна SuperDuperJava. У разі .NET ж, розробники швидше раділи новим можливостям, що опиралися змінам, хоча і невдоволення теж було багато.
Super frustrated with .NET Core atm, been doing .NET dev since day 0, and I honestly have 0 idea how to make things work on .NET Core...  Roger Johansson (@RogerAlsing) 27 березня 2016 р.

Як би там не було, факт в тому, що .NET тепер перебуває в ситуації, подібної до тієї, що мала місце бути з Python 2.x і 3.x. А ще ж є WinRT, Mono, Unity і Xamarin, які теж не відрізняються стовідсотковою сумісністю...
Release Candidate
Якщо ви нормальна людина, і не прибули на Землю з однією з планет системи Альфа Центавра, то, швидше за все, після одиниці у вас йдуть числа 2 і 3, після альфа версії йде бета, а після Release Candidate слід фінальний реліз, ну або RTM.
Самі хипстерские контори пишуть на новому ASP.NET з перших альфа версій. Я особисто встиг попрацювати в двох командах, які використовують цей фреймворк. З ним цілком можна жити, якщо оновлювати програму по ходу виходу нових версій, без відставання від графіка випуску. Звичайно, робота з оновлення додатків не найцікавіша, але смаколики нової версії того варті, якщо компанія може собі це дозволити.
В нормальному світі, коли проект підходить до стадії Release Candidate, спільнота очікує стабільності. "Це занадто нудно" — напевно, так подумали в Microsoft. Виявилося, що найцікавіше ще було попереду. Раптово, самі великі зміни в історії нового фреймворку трапилися коли версія отримала приставку RC. Першою ознакою прийдешнього пожежі став project.json, а точніше його заміна на старий добрий MSBuild. Якщо бути чесним, то це зміна саме по собі не є катастрофою. Однак, саме project.json був флагманом "нового" .NET. Подивіться презентації з численних конференцій — піар машина заманювала хіпстерів з світу Go і, о боже, Node.js саме такими речами. Крім того, жахливий таймінг — як можна називати щось Release Candidate, коли попереду чекає зміна системи збирання для всього фреймворку?
OH: "i've got a talk on .NET Core in 2 weeks. I think i'll just get up on stage and cry for 50 minutes"  Hadi Hariri (@hhariri) 27 травня 2016 р.

Далі — більше. ASP.NET Community Standup — канал на YouTube, де розробники в щотижневих випусках розповідають про новий ASP.NET і процес його розробки. Стендап, до цього стабільно виходив раз на тиждень, несподівано замовкає на місяць. Остання публікація називається "Do we have dates?", що дуже символічно. Розробники фреймворку, до цього активні користувачі твіттера, починають побоюватися, не вплутуються в дискусії. Решті ж твіттер кипить від обурення. Всі губляться в здогадах. Створюється враження, що ті, хто робив цей проект, тепер самі не в курсі про те, що відбувається. З здогадок спільноти — прийшли "дорослі хлопці", які дали прочухана "наигравшимся вдосталь дітворі" і взяли все під свій контроль.
Змішалися в купу коні, люди, WebAssembly
Про те, який розбрат діється в світі .NET можна судити по сплив у мережі скріншотам обговорення майбутнього платформи всередині Microsoft. В той час, як ASP.NET знаходиться в підвішеному стані, розробники обговорюють дивні теми на зразок підтримки компіляції в WebAssembly. Швидше за все, .NET Core, у його поточному вигляді незручний деяким відділам Microsoft (зразок Xamarin) з-за своєї несумісності. Одна частина Microsoft не зовсім задоволена тим, що зробила інша. Як Лебідь, Рак і Щука, кожен тягне на себе. В результаті — топтання на місці і дивне мовчання.
hurry up and bring .NET in the browser (again) pic.twitter.com/6VtwK8ctzp  Jose Fajardo (@josefajardo) 26 травня 2016 р.

Що далі? Можна зробити кілька припущень про майбутнє .NET виходячи з обговорень в офіційному каналі Slack: Mscorlib і AppDomains швидше за все повертаються у своєму первісному вигляді, що ставить під питання модульність всього фреймворку, і, взагалі, необхідність початкового наміру. Натомість — деяка підмножина API, доступне і сумісне на всіх платформах починаючи з ASP.NET і закінчуючи Unity і Xamarin. Це досить великі зміни. Щодо нових термінів — абсолютна невизначеність.
Висновок
Незважаючи на блискучу роботу, виконану командою розробки, відсутність повної картини в очах менеджменту призвело до того, що велика кількість розробників зробили ставку на платформу, яка ніколи не буде випущена в її нинішньому вигляді. Можна довго сперечатися на рахунок того, чи було правильним рішення поділити платформу на дві гілки, але думати на цю тему потрібно було набагато раніше. Розворот на 180 градусів у стадії RC це найгірше, що можна було придумати. Release Candidate це, цілком собі, усталений термін, який передбачає якісь зобов'язання, які непогано було б виконувати.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.