Так повелось, что в нашей компании основным языком для backend разработки был выбран C#. Мы, кстати, этим выбором всегда были довольны, а когда MS начали развивать платформу .net Core, стало еще интереснее, так как C# — это хорошо, но C# под Linux — еще лучше.
Путь перехода на кросс-платформенную разработку я описывать не стану, так как уже очень многие прошли путь перехода с Framework на Core.
Сделаю акцент на одном моменте. Помимо всего прочего, в сторону хостинга наших приложений под Linux нас подтолкнул Docker, так как очень хотелось приобщиться к молодежному течению контейнеризации всего что только возможно.
Поскольку мы разрабатываем enterprise, то вместе с нами должна была убежать под linux и сквозная windows аутентификация. Собственно это и стало побудителем к написанию статьи. Так как информация находилась весьма трудно, отдельными кусками, и общением со многими людьми, идея собрать все необходимое в одном месте и описать работающий вариант показалась неплохой.
В качестве решения был выбран вариант с обратным прокси под nginx с kerberos аутентификацией. А чтобы решением могли пользоваться товарищи из разных проектов, было решено запилить образ docker, который бы решал базовую задачу, и от которого могли бы наследоваться другие, или использовать его как есть.
Для того чтобы заработал kerberos, надо было собрать nginx с дополнительными модулями.
В итоге получилась примерно такая команда. Все слеплено в два вызова, чтобы создавать меньше слоев.
Разберем наш Dockerfile. Базироваться будем на весьма компактном образе с alpine
FROM alpine:3.7
Далее затянем нужные пакеты, исходники nginx и требуемого модуля spnego-http-auth-nginx-module. В итоге получается примерно такая команда
ENV NGINX_VERSION 1.15.1
RUN set -ex && apk add --no-cache git krb5 krb5-dev ca-certificates libressl pcre zlib && apk add --no-cache --virtual .build-deps build-base linux-headers libressl-dev pcre-dev wget zlib-dev && cd /tmp && wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && tar xzf nginx-${NGINX_VERSION}.tar.gz && git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git nginx-${NGINX_VERSION}/spnego-http-auth-nginx-module
Данный блок был выделен отдельно, чтобы при повторной сборке данный слой мог браться из кэша, так как он самый долгий по времени.
Следующим набором команд соберем nginx и приберемся за собой, чтобы образ не распухал понапрасну
RUN cd /tmp/nginx-${NGINX_VERSION} && ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_slice_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-stream_realip_module --add-module=spnego-http-auth-nginx-module && make -j$(getconf _NPROCESSORS_ONLN) && make install && sed -i -e 's/#access_log logs\/access.log main;/access_log \/dev\/stdout;/' -e 's/#error_log logs\/error.log notice;/error_log stderr notice;/' /etc/nginx/nginx.conf && adduser -D nginx && mkdir -p /var/cache/nginx && apk del .build-deps && rm -rf /tmp/*
И чтобы все это имело смысл, поднимем nginx
CMD ["nginx", "-g", "daemon off;"]
Можно считать, что образ готов, теперь приступаем к тому, чтобы наш сервер имел возможность авторизовывать пользователей.
Для этого нужно найти администратора домена, мне с ним крайне повезло — парень оказался отзывчивым и сделал то о чем его попросили очень быстро. А сделать нужно следующее.
Допустим, у хостовой машины hostname — "host-linux", а ваш домен — "DOMAIN.LOCAL".
В домене надо завести машину с именем "host-linux" и создать учетку, к которой ее привяжем, например, "host-linux-user". Далее надо создать SPN и сгенерировать keytab файл, который нам будет нужен при поднятии контейнера.
У нас команда получилась примерно такая
C:\Windows\system32>ktpass -princ HTTP/HOST-LINUX.domain.local@DOMAIN.LOCAL -mapuser host-linux-user@DOMAIN.LOCAL -pass yourpassword -cryptoAll -ptype KRB5_NT_PRINCIPAL -out C:\Temp\web.keytab
После того как я получил файл, можно было идти экспериментировать. В результате у меня получился следующий nginx.conf
http {
#Whatever is there by default
server {
listen 80;
server_name localhost;
#Here kerberos stuff starts
auth_gss on;
auth_gss_realm DOMAIN.LOCAL;
#Keytab file from the mounted folder
auth_gss_keytab /home/spnego/config/web.keytab;
auth_gss_service_name HTTP/HOST-LINUX.domain.local;
auth_gss_allow_basic_fallback off;
#Here kerberos stuff ends
location / {
root html;
index index.html index.htm;
}
#bla-bla-bla
Теперь, чтобы все завелось, надо при поднятии контейнера закинуть ему актуальный nginx.conf и скормить полученный web.keytab. Для этого воспользуемся магией docker-compose
version: "2"
services:
nginx-spnego:
image: fclmman/alpine-nginx-spnego
#опишем проброс портов. Например такой
ports:
- 80:80
- 5010:5010
- 443:443
- 8001:8001
#примонтируем раздел с web.keytab, и закинем в контейнер наш конфиг
volumes:
- ./config:/home/spnego/config
- ./config/nginx.conf:/etc/nginx/nginx.conf
Проследуем в директорию, где у нас лежит docker-compose.yml. В нашем случае, в той же папке должна быть директория ./config с файлами nginx.conf и web.keytab. Выполним команду
docker-compose -f ./docker-compose.yml up -d
Контейнер поднялся и не умер. Это дает надежду на успех.
Откроем браузер на доменной виндовой машине.
В одной вкладке откроем chrome://net-internals/ и запишем запросы, которые у нас ходят. В другой вкладке откроем http://host-linux:80/. Вернемся в chrome://net-internals/ и посмотрим результаты.
#Видим что сервер потребовал negotiate
t= 3 [st= 3] HTTP_TRANSACTION_READ_RESPONSE_HEADERS
--> HTTP/1.1 401 Unauthorized
Server: nginx/1.15.1
Date: Fri, 10 Aug 2018 14:15:54 GMT
Content-Type: text/html
Content-Length: 597
Connection: keep-alive
WWW-Authenticate: Negotiate
t= 4 [st= 4] HTTP_TRANSACTION_SEND_REQUEST_HEADERS
--> GET / HTTP/1.1
Host: host-linux
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Authorization: Negotiate #очень длинный набор букв
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
t= 4 [st= 4] -HTTP_TRANSACTION_SEND_REQUEST
t= 4 [st= 4] +HTTP_TRANSACTION_READ_HEADERS [dt=47]
t= 4 [st= 4] HTTP_STREAM_PARSER_READ_HEADERS [dt=47]
t=51 [st=51] HTTP_TRANSACTION_READ_RESPONSE_HEADERS
--> HTTP/1.1 200 OK
Server: nginx/1.15.1
Date: Fri, 10 Aug 2018 14:15:54 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Fri, 10 Aug 2018 12:21:36 GMT
Connection: keep-alive
WWW-Authenticate: Negotiate #Набор букв покороче
ETag: "5b6d8350-264"
Accept-Ranges: bytes
В результате видим, что операция прошла успешно и видим приветственный экран nginx.
Стоит сделать одно уточнение, работать будет все только по hostname, но насколько я понимаю это правильно, ибо kerberos мы привязывали как раз к нему.
Спасибо за внимание, если вы дочитали до этого места, и очень надеюсь что статья окажется полезна.
Комментарии (69)
Marwin
12.08.2018 23:37+1не то чтобы я придираюсь… но если потенциальный клиент сидит на винде с AD, пользуется виндовым же стэком ПО… то зачем городить огород? Только сэкономить на винсервере и поиграться с докером?
Не спорю, я вот тоже подумываю перенести WebApi (уже ранее портированное на Core) на линукс. Но у меня это просто сайт без заморочек, где полноценный винсервер ради просто хостинга .net — полный оверкилл.Vahman Автор
13.08.2018 06:49Для меня лично интересно было поиграться с докером. Для компании — совершить некоторое импортозамещение, так сказать
bugdesigner
13.08.2018 07:07Про "импортозамещение" — это шутка такая? Если нет, то объясните, что именно было "замещено" с импортного на отечественное?
Ndochp
13.08.2018 07:34+1С учётом новостей и веяний от Оракла, импортозамещение это не на «отечественное», а на «то, что не попадёт под санкции». Опенсорс очевидно не попадёт.
KY3EH
13.08.2018 11:50Не очевидно, что весь open source не попадет, GPL 2 и старше позволяет накладывать ограничения на отдельные страны. Например, лицензия на Fedora запрещает ее установку в Республике Крым.
amarao
13.08.2018 13:11Но при этом не запрещает распространение. Миррор в Москве прекрасно отдаёт всё что нужно куда нужно.
Главная сила опенсорса в том, что сырцы открыты. Может не быть сервисных контрактов, но их с лёгкостью заменяют сервисные контракты другой организации. Open governance, libre software — основные требования.
asbgrin
13.08.2018 14:32Тут статья была по этому поводу:
Fedora Linux запрещен к распространению на территории Крыма (и временно поломали DNS)
В итоге:
UPD_1
amarao внес очень существенный комментарий:
Я прочитал текст лицензии. Там сказано " you acknowledge that you understand all of the following:". Никаких запретов не вижу. Более того, там же написано: «Fedora software in source code and binary code form are publicly available and are not subject to the EAR in accordance with §742.15(b)»
А работа штатовских мирроров GPL'ем никак не регулируется. Синкайтесь с европейских или русских.
Коммент
Vahman Автор
13.08.2018 07:37Это не шутка. Условно говоря Винду могут запретить продавать нашим нефтяным компаниям, или оборонным, или банкам. Понятно что это никого не остановит, но Линукс никто запретить не сможет. Ибо можно сделать свой болгенос и обозвать его отечественной разработкой. Я понимаю что это смешно, но выглядит примерно так.
scumware
13.08.2018 12:56Open Source != бесплатное.
Половина содержимого дистрибутивов либо доступны для бесплатного использования только в некоммерческих целях, либо под вирусной лицензией. Почитайте что это (вирусная лицензия) на досуге. Если же вам плевать, и вы никаких исходников открывать не собираетесь, и платить за подписку не хотите, то какая вам разница что пиратить? Что Windows, хоть Linux…amarao
13.08.2018 13:12Чушь говорите.
Берёте дистрибутив debian, всё, что находится в секции main соответствует критериям свободного ПО.scumware
13.08.2018 13:18Может и соответствует. Только хватит ли main?
Кстати, под какой именно лицензией оно там?amarao
13.08.2018 13:44Хватит. В contrib и non-free попадает несвободный софт, который можно распространять (например, там долгое время валялсь ораклавая java, адобовый flash и т.д.).
В секции main находится софт под разными лицензиями, однако, все лицензии соответствуют DFSG (debian free software guidelines): www.debian.org/social_contract.html#guidelines
И там ясно написано:
The license of a Debian component may not restrict any party from selling or giving away the software as a component of an aggregate software distribution containing programs from several different sources. The license may not require a royalty or other fee for such sale.
…
* The license must not discriminate against any person or group of persons.
* The license must not restrict anyone from making use of the program in a specific field of endeavor. For example, it may not restrict the program from being used in a business, or from being used for genetic research.
Hardcoin
13.08.2018 18:21Страшные времена, даже в лицензиях вирусы.
Это вообще-то их преимущество, а не недостаток. Нет никаких проблем (кроме ментальных) открыть код доработок в отечественном дистрибутиве, если таковые будут.
DistortNeo
13.08.2018 21:34Могут запретить продавать, но не использовать.
По факту в оборонных организациях все поголовно пользуются пиратской виндой.
Insane11
13.08.2018 23:11Ну вот RedHat нас забанил. И казалось-бы, фиг с ним, есть центось и вообще целый лес всяких линуксов. Но есть разные ребята, типа SAP, которые ни за какие деньги никакой поддержки не гарантируют, если их софт крутится не на RHEL. Вот такой вот энтерпрайз. =\
unclejocker
13.08.2018 09:23+1У нас например контора богатая, но деньги на покупку лицензий выделяют раз в год (бюджет составляется на год), соответственно они все посчитаны и лицензию на windows server каждый раз из IT-отдела надо выпрашивать (обоснование зачем и т.п.). А дополнительный сервер с линуксом они разворачивают по щелчку пальцев, выходит всем удобнее.
scumware
13.08.2018 13:04Извини за любопытство, но что вы там такое регулярно разворачиваете? Что бывает нужно развернуть и что сложно обосновать?
Я постоянно, каждый день пишу код, что-то тестирую, что-то дебажу, но за последние больше чем 2 года я поставил ровно одну копию 2008R2. Т.е. даже не я, а мы (мой «маленький отдел»).unclejocker
13.08.2018 13:14Про «все время» разговора не было. За год две-три системы добавляются/переделываются. И у конторы есть традиция разводить различные приложения по разным серверам, чтобы они по минимуму друг на друга влияли, т.к. случается бывает и хайлоад и ddos.
Обосновать-то не сложно, но если этого не нужно, то ведь так проще, верно?
К тому же, бОльшая часть продакшена и так на linux, соответственно наворачивать еще и windows сегмент не очень удобно — зоопарк получается. В общем все в комплексе.
Laney1
13.08.2018 09:52Помимо всего прочего, в сторону хостинга наших приложений под Linux нас подтолкнул Docker, так как очень хотелось приобщиться к молодежному течению контейнеризации всего что только возможно.
в виндовс же тоже есть контейнеры, докер и т.п.?
Vahman Автор
13.08.2018 11:13Есть, но как говорят те, кто с ними сталкивался, работают они пока что не так же хорошо, как под linux.
anonymous
13.08.2018 10:31Статичный кейтаб это простой костыль для тестового окружения, а в продакте лучше бы его регулярно обновлять, как это происходит в виндах (вместе с паролем машины, раз в 30 дней, емнип). Я для этого ввожу сервер в домен с помощью SSSD и даю приложению права на системный кейтаб. По требованиям безопасности у нас учетки машин в AD, не меняющие пароль и билеты kerberos, блокируются.
Вот только упихать в Докер SSSD будет немного сложнее :)Vahman Автор
13.08.2018 12:03Я правильно понимаю, что в этом случае вогнать в домен хостовую машину будет недостаточно, так как права нужно выделить именно приложению, которое находится в контейнере?
anonymous
13.08.2018 12:14Я не силен в контейнерах, но докер позволяет замапить хостовый каталог внутрь контейнера. Но давать доступ из контейнера в хостовый /etc — тоже немного костыль. В идеале — по крону копировать нужные билеты (ktutil rkt/wkt) из системного кейтаба в отдельный и забрасывать в контейнер. Таким образом можно секьюрно разделить сервисы в разных контейнерах с абсолютно разными SPN.
scumware
13.08.2018 12:47>… очень хотелось приобщиться к молодежному течению…
==Поиграться за счёт работодателя (в рабочее время).
Очень весело живёте, господа: вас не терзают вопросами типа «когда будет готово!???», «почему опять регрешены полезли, и баги по 15 раз переоткрываются?», похоже нет дебага на неделю с разбором дампов, нет ежедневных отчётов. Подозреваю, что даже окна на улицу в офисе есть, и в них иногда солнце светит.
Если же я ошибаюсь, и вокруг такой же трэш как и везде, но вы сидите и занимаетесь тем, что лично вам интересно, то возникает вопрос: сколько вы получаете?amarao
13.08.2018 13:13+1Обычно те, кто «играются» получают больше тех, кто пашет. Потому что у вторых кругозор шире и спектр доступных решений больше. Плюс любопытство, которое всяко сильнее «надо».
scumware
13.08.2018 13:24Мой опыт подсказывает, что наоборот. Пока у меня была возможность играться, я едва-едва сводил концы с концами. Только потом захотелось своё жильё и немного больше уверенности в завтрашнем дне — необходимость впахивать стала осознанной. А неудачная попытка уйти в свободное плаванье показала, что «свобода» может быть хуже рабства.
amarao
13.08.2018 13:46Вы под свободным плаванием подразумеваете фриланс. Я говорю про искренний интерес к технологиям вместе с желанием «поиграться с новым».
0xd34df00d
13.08.2018 23:43От нового зависит. За агду и идрис не особо платят :(
amarao
14.08.2018 12:42www.adga.ca/en/search/job
www.facebook.com/agdawa/posts/-job-opportunity-have-you-ever-thought-you-would-like-to-share-your-industry-kno/1861700653868768
Причём я уверен, что этим людям платят больше, чем php-веб-дизайнерам.0xd34df00d
14.08.2018 16:37Что-то мне кажется, что это немножко другое, а не это.
amarao
14.08.2018 16:47Окей, я плохо искал. Ищу лучше, хотя мне и сложно (не мой круг интересов). Я точно знаю, что SE на Coq ищут и довольно серьёзно. Вообще, с знанием type theory не найти работу — это надо постараться.
А я говорил про другое — если человек возится с кучей всего интересного по своему интересу, то он легко находит области, где его интересы применимы. Наоборот, если человек пашет на неинтересной работе хорошо, ему накидывают ещё больше неинтересной работы пахать.
Vahman Автор
13.08.2018 13:36Речь не идет о том, чтобы все время играться с новыми технологиями просто потому что захотелось и не писать полезный код. В данном случае «поиграться» и «надо» совпали. Естественно, все было согласовано с начальством. Начальство нам говорит: «Надо двигаться в сторону opensource». Мы говорим: «Ок, но нужно время чтобы получить новые знания и провести некоторые эксперименты». Мы обосновали зачем нам docker, зачем net core, и какие преимущества мы получим при разработке и при доставке приложений.
Hardcoin
13.08.2018 18:26+2почему опять регрешены полезли, и баги по 15 раз переоткрываются?
А собственно говоря действительно, почему? Если баги систематически переоткрываются — это нестандартная ситуация и требует решения.
ALexhha
13.08.2018 18:52+1Я так и не понял посыла статьи. Для меня она выглядит так — «Мы услышали, что докер это стильно/модно/молодежно и научились собирать и запускать nginx в докере». Или я просто не заметил скрытый смысл?
В чем конкретно заключается уход от винды? Какие преимущества вы получили/какие проблемы решили благодаря уходу? С какими проблемами столкнулись?Vahman Автор
13.08.2018 19:41Возможно, заголовок был выбран неудачно. На самом деле, статья описывает лишь небольшой кусок работы, связанной с переходом на деплой под linux. Преимущества в том что мы получаем свободную среду для деплоя так как перешли на core, и не приколочены к винде и iis, получили удобство при развертывании сред разработчиков, тестовых и продуктивных сред, так как стали использовать docker, столкнулись с тем что надо было оставить сквозную аутентификацию, чтобы пользователи, которые все равно сидят под windows не заметили подмены.
DEN_Z
15.08.2018 08:57+2От окошек в крупном жирном энтерпрайзе почти не убежать. В основном самые крупные заказчики на пространстве СНГ платят не за ОС, а за сервис. Из своего опыта могу сказать, что затраты на разного рода поддержку (за полный life cycle) примерно вдвое превышают стоимость самих систем.
Да и к любому открытому ПО тоже подходят осторожно. Например выбирая между RedHat с максимально дорогим пакетом поддержки и чем-то бесплатным типа CentOS почти всегда не в пользу последней (только если там не сервис на который всем пофиг).
И да еще есть причина с точки зрения менеджмента по которой постоянно стараются (по крайней мере в СНГ) раздувать OPEX.Vahman Автор
15.08.2018 09:01Мы как раз пилим крупный жирный энтерпрайз и никакие новые проекты не делаются для десктопа, все под web, поэтому со стороны разработки и внедрения мы вполне можем убежать от окошек. Пользователи, ясное дело, продолжать работать под windows. Насчет ПО — чистая правда. Postgre — только postgre PRO, linux — RHEL или OracleLinux. Наличие платной поддержки очень приветствуется. Ну не могут большие и сильные компании взять и не отвалить кому-то денег.
firedragon
15.08.2018 10:28Все глобально проще. В портфеле любой компании вендора есть +9000 пользователей, и ваша проблема скорее всего уже решена.
Anshi85
Это конечно понятно, что сейчас можно перейти с Windows на linux, без особых проблем, сам уже 1.5 года как для работы использую Linux mint, хотя 90% серверов заказчика на Windows server. Были конечно в первое время неудобства, но практически всему софту на windows нашел аналоги на Linux, Вопрос в другом, как разработчики пережили уход с Visual studio и что используют в качестве альтернативы? Я не разработчик, но знаю что по удобству у Visual studio нет аналогов среди IDE, я например сейчас использую для своего pet проекта (MEAN stack)Visual studio code для Linux, ну это скорее редактор с функциями IDE чем полноценная IDE.
Areso
JetBrains Rider? Никогда не пользовался, но он существует
Anshi85
Так и знал что напишите, продуктами от Jetbrains пользовался, webstorm, pycharm, inteliji IDEA, да очень хорошие редакторы, но Visual studio после них как космический корабль, все очень удобно и понятно, intelli sense опять же, ну и для разработки под windows, WPF, WF, ASP.NET аналогов студии просто нет
Anshi85
Не редакторы а IDE, извиняюсь 2 часа ночи, голова не варит.
Iqorek
На вкус и цвет фломастеры конечно разные, но больше 2х лет не писал в Visual studio и не сказать, что забыл, как страшный сон, последние версии были почти ок, но совсем не скучаю. По удобству, стабильности, легковестности, intellisense, рефакторинг, анализатор кода, еще куча приятных мелочей, до intelij им далеко, а если не использовать Resharper, все было совсем плохо.
Попробуйте посмотреть обучающие видео от intelij.
Anshi85
Согласен с вами, у каждого разные предпочтения, я вот пользуюсь visual studio code очень удобный редактор, пробовал и sublime и atom, но VS code показался мне самым удобным и понятным для работы, мне для моих опытов и маленьких проектов с лихвой хватает функционала VS code.
shoorick
Пробовал и Sublime, и Atom, и VS Code, и Brackets, и vim, и могучий Komodo IDE — в итоге остановился на Geany.
mgremlin
+1 за Geany.
Минус у него только один: отлаживать низзя. А в VSCode можно.
Bedal
пока пишешь сам «на коленке» — всё отлично, к какой оболочке привык, та и работает. Но… когда нужно согласовывать работу команды, а это согласовывать с хранением версий, гонять удалённую отладку… собираем всё это в кучу — и видим, что для VS/TFS просто нет альтернативы.
Antervis
«нет альтернативы» ровно до тех пор, пока все разработчики и таргеты на windows. Кроссплатформенность и студия очень не любят друг друга
Bedal
Не надо путать опять в сторону наколенки. Речь не о целевой платформе, а о работе командой. В которой не два человека.
vodun
Уже как полгода перешёл на Rider с Visual Studio, да было тяжело, но сейчас, ни за что назад не вернусь. Все удобнее и быстрее.
DistortNeo
Прекрасный редактор. Но средства отладки в Rider по сравнению c VS действительно не очень.
0xd34df00d
Смотря для какого языка. Для шарпа — возможно, для плюсов — не факт, KDevelop раньше был лучше и шустрее и умнее по интеллисенсу (особенно если код с бустом и всяким таким), сейчас CLion. Для хаскеля — вим с парой плагинов.
Kobalt_x
CLion на больших проектах(уровня в половину ue4 sdk) довольно жруч и тормозен. Студия + visual assist намного быстрее во всех аспектах рефакторинга под windows.
По интеллисенсу с секундомером не стоял, не знаю.
DistortNeo
В последних релизах VS работу с C++ довольно неплохо подтянули.
0xd34df00d
Это может многое объяснить. VS для C++ последний раз я пробовал ну очень давно, для C# — лет пять назад, и тогда она подтормаживала на довольно простом проекте по сравнению с тем же KDevelop для плюсов (хотя плюсы парсить, мягко скажем, сложнее).
firedragon
VS + Recharpter. От этого ни куда не уйдешь, да и смысл?
Для маленьких мобильных приложений использовал Sublime, крайне рекомендую.
usrsse2
Monodevelop ещё
Vahman Автор
А разработчики могут и не уходить из под windows. Я сейчас разрабатываю под виндами, хостимся под CentOs. А насчет rider — так я его и под виндовс неплохо использую, для разработки api более чем хватает, resharper под капотом. Иногда фризится, но с каждой новой версией кажется что все становится лучше и лучше. А голая студия без resharper'а не очень радует. Некоторые совсем сильные парни пишут в vim, говорят там есть плагины со всем что может понадобиться. Но сам я не пробовал, для меня это перебор.
scumware
>>Некоторые совсем сильные парни пишут в vim, говорят там есть плагины со всем что может понадобиться.
Писать даже я могу в блокноте, даже в командной строке. И компилировать из под неё же. Сложности начинаются, когда нужно раскопать багу и поправить багу в мегатонне говнокода, доставшегося в наследство. Для этого нужны продвинутые возможности навигации по коду, статический анализатор (который, например, подскажет, что «override» забыли), и хорошие возможности для рефакторинга.
Wedmer
А вы думаете, что vim не дает таких возможностей?
DarkWanderer
Таких, как Visual Studio + Resharper — точно не даёт
kovserg
codelite.org