Комментарии 158
И передам еще остальным виндоразработчикам и разработчикам под мультиплатформы, чтоб они также сделали.
Свои рутинные действия я решаю при помощи python, опять же мультиплатформерность это очень удобно.
Про конфигурацию сервера совершенно не ясно. Поясните.
И какие еще мелочи то? Работаю с Linux уже много лет, но на домашнем компе как была Windows, так и осталась, на рабочем — как была os x, так и стоит.
Даже под виндой есть клиенты, перейдя на которые после SourceTree, вздыхаешь с облегчением.
Для каждой задачи свой инструмент, бывают ситуации когда консоль незаменима, а бывают когда можно и GUI клиент поклацать. SourceTree очень даже достойный клиент по возможностям/удобству, жаль что его нету под линукс.
Из чисто личных предпочтений, манера требовать рассовывать зависимости в папки ОС, чтобы потом make скрипт их мог найти — вот это настоящий маразм специфики сборки некоторых проектов.
Git даже bash тянет с собой.
В каждой такой программе сидит маленький огрызок линукса разной степени древности и бажности.
Например Program Files/Git/mingw64/
Как если бы из лопаты торчала сосна, потому что не смогли отпилить. Жрите-с что дают.
А под линуксом всё органично вписано. Либы, инклуды всё на своём месте. Апдейт из репозитория и лёгкая интеграция и компиляция всего в пару команд.
В нулевых у меня под виндой стояло, ЕМНИП, 6 комплектов gcc (а-ля mingw) со всеми необходимыми тулзами для разработки под разные платформы =)
Я уж лучше закрою глаза на папку старого порта баша в c:/program files, нежели буду постоянно плакать при запуске libre office.
Однако сейчас тенденция ухода ПО в SaaS, где превалирует серверное ПО.
Которого на C# и Windows не бывает?
Конечно есть, потому и пишу о тех, кто пишет на C#. Только на серверах Linux встречается гораздо чаще.
Ну так не всех же интересует, что встречается часто, некоторых интересует то, что решает их задачи.
очень быстро принимается решение сменить платформу.
Это с учетом костов на миграцию?
Во сколько в среднем "руководству" обходится миграция с C#/Windows-based ERP-системы на *nix-based?
У вас вообще может быть технически невозможно либо финансово нецелесообразно это делать.
Но в целом разница в стоимости заставляет, как минимум, задуматься.
Я где-то упоминал ERP-систему?
Нет, вы написали, что решение о смене платформы принимается по результатам чтения биллинга — безотносительно софта, который на платформе крутится.
У вас вообще может быть технически невозможно либо финансово нецелесообразно это делать.
А вы говорили — с учетом всего. Хотя финансовая нецелесообразность — это именно ситуация (например), когда косты миграции больше, чем профит от нее.
Но в целом разница в стоимости заставляет, как минимум, задуматься.
Разница в стоимости чего, кстати? Если платформы — так для SaaS это как раз не важно, в случае SaaS вам продают готовый продукт, и вам пофиг, на чем он крутится.
Я говорю о том что в случае отсутствия жестких технических ограничений, после получения детализированного отчета по биллингу за использование облака, сразу же возникают мысли рассмотреть возможность смены платформы.
Я видел мало компаний компаний которые не пытаются уменшить OPEX по возможности.
Разница в стоимости виртуальных машин на которых ваш SaaS крутится.
Но это в случае если вы его таки продаете, а не покупаете :)
Я всего лишь указываю, что ваше утверждение
когда руководство видит биллинговый отчет за использование клауда отдельно по Win/*nix то очень быстро принимается решение сменить платформу.
верно не для всякого руководства, а только для конкретных случаев. Ну и да, сравните ваше первоначальное "очень быстро принимается решение сменить" с теперешним "сразу же возникают мысли рассмотреть возможность смены".
Не придирайтесь к словам, смотрите на суть
Это как-то влияет на факт того что Windows дороже и при возможности с него пытаются слезть несмотря на ломку?
А это факт? "Windows дороже" — возможно. "При возможности с него пытаются слезть" — нет. А уж если речь идет о SaaS, то, повторюсь, то, на чем этот софт написан, для покупателя значения иметь не должно — его волнует только финальная цена. И если какая-то компания может поставлять SaaS, поднятый на винде, и быть конкурентноспособной — значит, это возможно.
(с третьей стороны, я бы на месте этой компании потихоньку слезал с "SaaS, поднятый на винде" на "SaaS, поднятый на PaaS", и не парился вопросами того, винда ли там)
"Windows дороже" — возможно.
Вот кстати, неожиданный для меня факт. Возьмем амазоновский прайсинг, t2.micro, за час:
Linux $0.013
RHEL $0.073
SLES $0.023
Windows $0.018
С конфигами и установкой сторонних программ действительно беда. Но это разработчику не каждый день приходится делать.
А что там за беда с конфигами?
Программы настраиваются либо через рестр, либо с помощью GUI. Естественно, нет примеров конфигураций, которые можно посмотреть и исправить под свои нужды, нет комментариев к существующей настройке.
Реестр — чем не конфиг?
Примеры/документация в линуксовых конфигах тоже не блещют полнотой.
Другое дело, что разрабов чаще волнует удобство обычного юзера, а не админа, поэтому, потрудившись над GUI, о необходимости документировать ключи и значения реестра для админа забывают (или забивают).
Если вы админ, и вам нужно обеспечивать стабильную конфигурацию программ А, B и C на любой машине, то нужно эти программы установить на одной машине, настроить как нужно, экспортировать их настройки из реестра ([HKLM|HKCU]\Software\VendorX\ProgramA\* => ProgramX-Production-[YYYYMMDD].reg, [HKLM|HKCU]\Software\VendorY\ProgramB\* => ProgramY-Production-[YYYYMMDD].reg, etc ) в отдельные REG-файлы для каждой программы, и в последующем просто импортировать эти файлы в реестр на других машинах, грубо переписывая всё, что их инсталлеры понаконфигурировали по-умолчанию.
Если же вы разработчик программы, и вам нужно создать ветку конфигурации в реестре, и при этом вы хотите документировать его и дать админам возможность конфигурировать программу простым импортом нужных REG-файлов, то создайте набор REG-файлов для каждой фичи (FeatureX-On.reg, FeatureX-Off.reg, etc), которая хранит данные в реестре, и напишите там комментариии и возможные значения, точно так же как сделали бы для конфига в *никсах — как это сделано в том же FAR Manager.
Сам я серверный разработчик, и в своих программах с виндовыми заморочками мне работать не приходится.
Конфигурации серверов будут максимально приближены к продакшену.
Это вырождает изначальный посыл в «под Linux проще разрабатывать на Linux».
В Linux на данный момент наиболее удобно вести разработку ПО
Это очень такое ограниченное представление об ИТ. Или может уже для iOS стало удобнее там вести разработку, а то пацаны и не знают, все в xcode пишут.
Windows: можно поставить медленный dmd, либо сборку ldc, к которому нужна еще и VS, плюс, выкачать исходники libpng и собрать их с помощью той же VS или MinGW.
Моя домашняя Kubuntu: «sudo apt-get install ldc libpng16-dev» и погнали.
Так что, бывают ситуации, особенно со всякой экзотикой, когда в Linux все проще.
А разработка при этом ведется и на Windows, и MAC OS, и даже на Linux.
По поводу скриптов и автоматизации рутины — такие инструменты есть под любую популярную ОС.
Если говорить о Windows — повершелл не сказать что намного хуже баша. Ну и пайтон использовать никто не запрещает.
- Только в макоси я видел, что штатный текстовый редактор при сохранении показывает структуру папок от фонаря, а стандартную от корня, в стиле /usr/, открыть не может.
- Только для макоси пришлось гуглить, как отредактировать конфиги MySQL, Apache и PHP, т.к. они требовал рутового доступа, но гребаный редактор не позволял отрыть файл из произвольной папки.
- Только в макоси для обновление апача, нужно обновить ось.
Эта ось слишком много решает за меня. Так что спасибо, но тот же центос мне намного милее, а самой страшной проблемой было найти мануал по vim для работы по ssh.
PS. Про сами маки, как железки, ничего плохого сказать не могу. Тут уж они постарались, но цена явно не соответствует.
2. sudo edit /usr/…
3. Что за ерунда? AFAIK, апач в стандартную поставку не входит и ставится из MacPorts или HomeBrew, откуда прекрасно обновляется до самых свежих версий без влезания в системную поставку файлов (по-крайней мере в HomeBrew точно). Что нужно было сделать, чтобы прийти к выводу «для обновления апача нужно обновить ось» – ума не приложу.
3. На леопарде (не помню точно, была эта версия начальной или обновлялись уже до нее) апач уже был предустановлен, как штатное средство, но не сконфигурирован. И обновлялся вместе с осью.
PS. Так что все пункты — это мое имхо. Все таки линукс мне ближе, чем макось, т.к. вел он себя всегда именно так, как я этого от него ожидал.
Git удобнее? Ну может, может… когда не знаешь, что git под Windows работает так же. Хотя назвать git профессиональным инструментом — язык не поворачивается. Опять таки — открытие для тех, кто source control впервые встречает, ну, или, для тех кто предпочитает целыми днями манулы листать вместо производства, а затем нос задирать — сморите, мол, как я очередной мануал освоил. Впрочем команды разработчиков с огромным удовольствием переходят на TFS, когда показываешь им все преимущества профессионального продукта.
Хотя кому и Лада лучше коня, а кому Мерседес нужен, потому что ценит своё время, имидж, и качество.
хотя назвать git профессиональным инструментом — язык не поворачивается. [...] команды разработчиков с огромным удовольствием переходят на TFS, когда показываешь им все преимущества профессионального продукта.
Вот это сейчас, конечно, смешно. Во-первых, в TFS есть поддержка git как системы версионирования. Во-вторых, какие же преимущества профессионального продукта есть у TFVC?
Если вы open source проект, то да — git ваше всё, так как pull request'ы именно под open source разработку. На этом преимущества git заканчиваются. Остаётся просто голое складирование изменений в файлах. С кучей проблем. Не будем себе врать, что git удобен. Все мы видели, как члены команды (зачастую профессиональные программисты, а не джуниоры), тратят часы на очередной коммит, потому что где-то что-то пошло не так. Можно это отрицать, можно это принимать. Многие команды не понимают как нормально пользоваться git'ом — в следствие чего он у них чаще всего ни разу не связан с ходом проекта. Просто склад изменений файлов. А когда требуется срочно поднять из системы контроля версий рабочую версию, выяснить какой «коммит» надо откатить, или просмотреть привязку коммитов к проекту — тогда просто начинается фестиваль танцоров с бубном.
Поэтому TFS — ваше всё, если вы руководите несколькими связанными проектами, в которых задействованы разные люди. И если вы понимаете, что успех проекта важнее гордости о того, что пользуетесь git'ом. Потому что TFS тупо не создаёт проблем, а имеющиеся *решает*. Поэтому и переходят на него целые команды, когда им его показываешь.
Честно говоря, я бы вообще запретил называть git системой *контроля версий*. Просто системой складирования изменений.
P.S. есть, конечно же, люди, чувства верующих которых оскорбляет всё, что связано с именем Microsoft (им даже $ мерещится в имени этом) — это отдельная категория. Для них и Microsoft, и многие другие открывают репозитории на GitHub.
Это не смешно. У TFS нет поддержки git.
Да ладно. А что предлагают выбрать на слайде в туториале? Ну или вот: "In Team Foundation Server 2015 Update 1, a project administrator can add a Git repo to a team project".
Если вы open source проект, то да — git ваше всё, так как pull request'ы именно под open source разработку.
Какие-такие пулл-реквесты? В git нет пулл-реквестов.
Все мы видели, как члены команды (зачастую профессиональные программисты, а не джуниоры), тратят часы на очередной коммит, потому что где-то что-то пошло не так.
Не знаю насчет "мы все", я не видел. Зато я видел, как люди мучаются с коммитом в TFVC (а уж как люди мучаются с бранчами в TFVC — это вообще отдельный разговор.
Кстати, а с чем именно мучаются ваши "члены команды"?
Многие команды не понимают как нормально пользоваться git'ом
Так это проблема образования, а не версионной системы.
А когда требуется срочно поднять из системы контроля версий рабочую версию, выяснить какой «коммит» надо откатить,
А в чем проблема? Нет, вот конкретно — в чем проблема с каждым из этих пунктов?
или просмотреть привязку коммитов к проекту
Вот и началось. В терминах версионной системы все коммиты в одном репозитории привязаны к одному проекту (это верно и в git, и в TFVC). А если вы говорите о привязке коммита к задаче, то в этот момент мы покидаем границы собственно системы управления версиями, и начинаем говорить об ALM-системе.
Поэтому TFS — ваше всё, если вы руководите несколькими связанными проектами, в которых задействованы разные люди
Стоп-стоп. Поддержка управления проектами — не задача системы управления версиями. Вы точно не путаете VCS- и ALM-системы?
а имеющиеся [TFS] решает.
Простой вопрос. Вот у вас есть диапазон в 100 чейнджсетов. Вы знаете, что где-то в этом диапазоне было внесено изменение, сломавшее вашу систему, но не знаете, какое именно. Как именно TFS решает проблему нахождения этого изменения?
Честно говоря, я бы вообще запретил называть git системой контроля версий. Просто системой складирования изменений.
Простите, а в чем, по-вашему, разница? Система контроля версий — это именно система "складирования изменений" (если вы, конечно, не путаете систему контроля версия с системой управления релизами).
Фундаментальное достоинство — и одновременно проблема — TFS в том, что это монолит. В нем есть VCS (долгое время безальтернативная и далеко не идеальная), в нем есть управление задачами (среднее, на мой вкус), в нем есть билд-сервер (вот этот мне очень нравился, но мы и в нем постоянно бились головой в проблемы), есть система поддержи тестирования (мы так и не освоили ее), и, насколько я знаю (это было уже после того, как с него слез) добавили систему управления релизами. И все это — интегрировано: чейнджсеты привязываются к воркайтемам, воркайтемы — к билдам, из этой информации можно собрать чейнжлог и/или посмотреть тест-импакт и так далее. Очень круто, да. Пока ты сидишь внутри этого монолита. Как только ты начинаешь заменять его кусочки на что-то другое (например, тебе нужна другая система управления задачами), вся эта интеграция начинает трещать по швам.
Я повторю свой вопрос: какие преимущества "профессионального продукта" есть у TFVC?
Ну что я могу сказать на все ваши комментарии. В целом вы не ошибаетесь, но… и не совсем правы. Проблема монолитности решается ликбезом. А в последнее время кучей extension'ов. В целом да — большинство проблем — от незнания. Я работаю на европейском рынке, возможно в России — все в целом умнее (это не сарказм).
В целом скажу так: после перевода команд с git на TFS — продуктивность возрастает. Исчезают проблемы использования source control system. Команды начинают думать о проекте, а не об отдельных коммитах.
Со всем уважением: отвечать по пунктам не стану, т.к. время не резиновое.
Я писал «Это не смешно. У TFS нет поддержки git. У Visual Studio Online — есть». Это чтобы не вырывать из контекста.
Так я вам ссылку даю на on-premise TFS, при чем тут Visual Studio Online?
Проблема монолитности решается ликбезом
Как вы можете решить ликбезом проблему "я хочу использовать YouTrack вместо TFS WIM, но сохранить всю интеграцию"?
В целом скажу так: после перевода команд с git на TFS — продуктивность возрастает.
Вне зависимости от сложности проекта? При какой branching strategy?
Потому что лично мои наблюдения строго противоположны: переход с TFVC на git я воспринял как облегчение (особенно учитывая период в несколько месяцев, пока я пользовался ими параллельно), и эти наблюдения повторяются на многих людях.
Со всем уважением: отвечать по пунктам не стану, т.к. время не резиновое.
Я в таком случае сочту, что вы согласились со всеми моими возражениями — и при этом не смогли указать конкретных преимуществ.
git под Windows работает так же
Особенно учитывая, что виндовс не различает регистра в файлах.
Поясню предыдущего оратора — NTFS/FAT не различает, а не сама Windows.
А ситуация, в которой VeryImportantFile, veryimportantfile и VERYIMPORTANTFILE — одно и то же, чем-то лучше? Особенно, если имя файла фигурирует где-то в проекте (например, в конфиге).
Как говорится — в личных проектах хоть трамвай из буханки лепите. В профессиональных проектах — следуйте здравому смыслу.
Тот же Rust хорошо подходит для операционных систем, да и поддержка каналов в нем есть.
Во вторых — потому что он очень хорошо подходит к задаче.
Можно взять в качестве принципа например «всё ессть ветки дерева», чтобы вся система была гиганстким деревом, начиная от драйверов, и заканчивая каждой буквой на экране.
Или положить в основу функциональный подход — отсуствие состояний.
А так хорошая идея, может нового ничего не изобретут зато поможет избавиться от мохнатого легаси.
А нежизнеспособность системы, можно констатировать еще и по тому, что код открыт, а работы нет вообще…
кстати, название ROS для операционной системы уже используется
Если я правильно понял, канал — это менеджер задач + некая разделяемая память. Если я хочу прочитать из канала, я добавляю в него задачу, передавая параметрами то, что хочу прочитать. Когда данные будут готовы, канал их запишет в разделяемую память канала и вызовет мою задачу. Если я хочу записать в канал, то аналогично — я добавляю задачу, которая пишет в разделяемую память канала. Синхронизация не нужна, т.к. канал использует одно ядро процессора (через соответствующий канал процессора).
Если так, то…
Разве передача всех данных в канал через разделяемую память канала — это не излишество? У пишущей задачи, как правило, уже есть собственный буфер с данными и его придется копировать в память канала.
Зачем нужно различать экспортеров и импортеров?
export/import — нужен для маппинга канала в userspace и для удаленных(remote) каналов? В принципе, никто не мешает работать напрямую с исходным каналом, так?
Зачем каждому каналу собственный менеджер памяти?
Вообще не знаю как насчет операционных систем, но эта идея выглядит интересной для построения сетевых приложений…
Ну, как автор единственного комментария по теме, я бы хотел получить более развернутый ответ :-)
Диспетчер задач не имеет непосредственного отношения к каналам, просто задачи могут легко передавать управление своим контрагентам, чтобы избежать неэффективных (во многих случаях) схем постоянного опроса данных.
Экспорт и импорт – это просто API для установления взаимодействия между задачами: одна задача должна сообщить окружающим, что она готова предоставить какую-то услугу и что эта услуга называется так-то и так-то и физически материализуется в такой-то память такого-то размера, а другая задача отображает эту материализованную услугу к себе в память и начинает общаться с первой.
Что такое "услуга"? Я думал, что канал — это и есть услуга. Т.е. сам факт существования канала означает, что кто-то предоставляет услугу.
Возьмем, к примеру, канал жесткого диска. Как некой задаче прочитать данные с диска?
- она формирует подзадачу и передает её каналу жесткого диска с параметрами (operation=READ, sector=123456)
- канал (?) или другая задача прикрепленная к каналу? (как тогда она узнает о п.1?) отправляет запрос на контроллер жесткого диска с просьбой прочитать данные в память (в память канала? в память вызывающей таски?) и добавляет таску в канал, владеющий прерываниями.
- когда чтение завершено, вызывается прерывание, которое приводит к вызову таски из канала прерываний, которая вызывает таску из п.1, сигнализируя вызывающему коду об окончании операции.
Так?
Для чтения с диска:
1. Привилегированная задача, обслуживающая диск, экспортирует некоторый канал. Канал, к примеру, может содержать поля с намером цилиндра, головки, сектора и типом операции, а также место под данные сектора.
2. Задача, желающая прочитать данные, импортирует этот канал, заполняет поля — цилиндр, головка, сектор, чтение — и передает упраление привилегированной задаче (yield-to).
3. Привилегированная задача получает управление, программирует аппаратуру в соответствии с запросом, перехватывает прерывание (запрашивает от ядра системы через системный канал) и «засыпает».
4. По завершении операции чтения аппаратура генерирует прерывание, привилегированная задача получает управление, проверяет данные, если надо — копирует их в канал (если аппаратура не может скопировать данные по адресу канала — например, он располагается слишком высоко в физической памяти), а потом передает управление обратно задаче-клиенту (yield-to).
5. Клиент просыпается — а у него в канале уже лежат данные нужного сектора диска.
Надеюсь, что это понятно (мне — да :) ) Но, если нет, советую написать автору — его контакт в тексте есть.
А так спасибо за статью, интересно даже несмотря на объем статьи. )
А посмотреть на нее где нибудь можно? Код или какой-то рабочий прототип?
Интересно, но непонятно текущее состояние проекта.
К сожалению, в IT сфере множество новых технологий, которые значительно лучше старых, но выгода от них разбивается об затраты на внедрение.
а что касается самого поста, то я почему-то очень скептично настроен… и уж точно на первых этапах будут проблемы с софтом, драйверами, безопасностью… это те шаги — которые не за один год проходят…
Да просто по объему кода физически невозможно (я не про ядро и не про «микро» OS дипломных проектов).
В том, что этим можно заниматься — даже не сомневаюсь. Возможно даже идеи заложенные концепциях гениальные.
Но кто этим будет заниматься и проверять/развивать?
Типичный диплом (тема) в НГТУ на соответствующем факультете был (сейчас не знаю): RTOS под какой ни будь контроллер/процессор или разработка ядра процессора с микрокодом.
Естественно учебная и только для демонстрации работы.
В рассуждения о…
Intel закрывает разработку в России. Может быть появившаяся статья с этим связана… или нет…
Наверное если построить аналог десктопной оси, то ядро в своем кернел спейсе будет вот так красиво работать без сохранения контекста, a userspace чаще всего как вытесняющая многозадачность как сейчас. Во встраиваемых или мобильных осях наверное можно попытаться эти канальные прелести вывести на уровень пользовательского API
Пока подходит CLR — в связи с наличием управляемой памяти для функционального программирования.
К сожалению, объем статьи не позволяет детально рассмотреть все аспекты ОС, но поверьте на слово, что вопросы отладки, трассирования и измерения производительности рассматривались и учитывались с самого начала. Есть несколько вариантов организации отладки: (1) непосредственное исполнение отлаживаемой задачи в контексте привилегированной задачи-отладчика (так как код любой задачи не зависит от адреса загрузки и от адресов отображения каналов) и (2) расширение системного канала (и, соответственно, ядра ОС), позволяющее получать привилегированным задачам информацию о поведении и производительности других задач, ну а также (3) любые комбинации подходов 1 и 2.
в частном случае каналов с кодом — да, это очень похоже на dll, об этом есть упоминание в тексте.
И да, если ничего не делать специально — применять ключи, цифровые подписи и прочие механизмы защиты, то вероятность подмены канала есть.
Но никто не мешает: 1) не пользоваться каналами с кодом для важных программ, и 2)ввести механизмы защиты, описанные выше.
В функции ОС вообще не входит защита программ от подобного фишинга, это задача самих приложений. ОС должна уметь защищать себя, и она это умеет.
2) При передаче кода ведь подразумевается, что везде используется одинаковый тип процессора? Это не так в случае сетей и это осложняет использование разных типов процессоров на одной материнке (мало ли что! менять мир — так уж универсальным образом!)
3) Также очень жалко статические переменные. Опять это требует изменения языков или компиляторов (ключи добавить с запретом статики придётся)
2)Хороший вопрос, спасибо. Но нет. Когда речь идет об удаленном использовании, репликатор каналов прекрасно осуществит бинарную трансляцию.
3) ну это как раз реализуется проще всего.
Создаем новую OS. Действительно новую, реально операционную, и правда – систему