LINUX.ORG.RU

Wayland GBM (А знали ли вы?)

 ,


1

1

Постоянно встречаются вэйланд-нигилисты, которые его собсно, отрицают, ога.

Мне кажется пришло время пояснить за слона в комнате – GBM.

Знали ли вы, что в вейланде всю основную работу выполняет GBM???

Тоесть, представьте, все окна спавнятся сразу в видеопамяти, минуя процессор, если это игры под вайном/SDL, либо программы с современными тулкитами.

И композитинг тоже выполняется в ЖБМ, сразу в видеокарте, тоесть – отрендеренные окна не возвращаются в операривную память…

И даже (ПРЕДСТАВЬТЕ) все программы, даже в оконном режиме, могут использовать все преимущества DRI3.

Подумайте над этим.


Ответ на: комментарий от anonymous

ВНЕЗАПНО, я предполагал коллективные размышления, и я тебе не учитель, не брат и не сват.

Предполагалось, что все, в том числе и ты, напишут свои мысли для разъяснения более глубокого понимания отличий Х от вяленка, наступит коммунизм (или научная анархия) и всем станет хорошо.

Бог любит даже тебя, но пока-что ты только паразитируешь в треде как пиявка.

Set440
() автор топика
Ответ на: комментарий от Set440

скоро я тебя научу

я тебе не учитель

Предполагалось, что все, в том числе и ты, напишут свои мысли

кроме одного исключения, тебя, вадег, верно?

Бог любит даже тебя

ты давай без воды. конкретику давай

anonymous
()
Ответ на: комментарий от anonymous

Вы серьёзно ждали повсеместного прихода systemd чтоб наладить такую несложную вещь? Так следующим шагом уже будут навязывать «удобства» понастойчивее и понаглее.

Конечно. Теперь не надо пердолиться, делать багрепорты что очередная срань не работает с openresolv, но работает с dnsmasq, но только если не включена третья странь. Все просто работает. Это ли не прекрасно?

gaylord
()
Ответ на: комментарий от anonymous

Именно так Окно Овертона и двигается. Десять лет и уже «считается» что только так и может/должно быть.

Так хорошо же стало. Было плохо, а стало хорошо.

P.S. А окно овертона это вообще раздутый миф, родившийся из рекламной кампании.

gaylord
()
Ответ на: комментарий от gaylord

Конечно. Теперь не надо пердолиться, делать багрепорты что очередная срань не работает с openresolv, но работает с dnsmasq, но только если не включена третья странь. Все просто работает. Это ли не прекрасно?

Можно взглянуть на произошедшее и под другим углом. Скажем, вы не умеете что-то настроить и поленились разбираться. Но появляется некто, кто говорит «сейчас всё сделаем, но не задавайте лишних вопросов».

И вы радостно делегируете необходимость разобраться в вашем вопросе плюс ещё чуть-чуть привелегий. А потом, возможно ещё немножко и ещё малость, постепенно отучаясь вникать в то, что делается.

Для вас «всё прекрасно», спору нет. Если бы не пара мелочей: тот, кто вам всё чинит будет всё более настойчиво заявлять, что это один единственно верный способ и под эту дудку и всех остальных лишают выбора. Ну и кроме того, ОС в которых именно так, как вам нравится «без пердолинга, жми вот тут и заработает» уже и так есть. Зачем делать ещё одну такую же?

anonymous
()
Ответ на: комментарий от anonymous

Можно взглянуть на произошедшее и под другим углом. Скажем, вы не умеете что-то настроить и поленились разбираться.

Под выдуманным углом, ты хотел сказать. Потому что я знаю как настроить split DNS без systemd. Вызвать скрипт откуда надо не то чтобы rocket science. А вот что действительно сложно, так это сделать все это консистентным для wireguard, openvpn, NM и прочего блуда. Эта задача ложится на дистростроителей. И они её полностью провалили.

Для вас «всё прекрасно», спору нет. Если бы не пара мелочей: тот, кто вам всё чинит будет всё более настойчиво заявлять, что это один единственно верный способ и под эту дудку и всех остальных лишают выбора. Ну и кроме того, ОС в которых именно так, как вам нравится «без пердолинга, жми вот тут и заработает» уже и так есть. Зачем делать ещё одну такую же?

Так никто никого не заставляет. Вон люди Devuan пилят, радуются. Им весело. То что я их труд считаю абсолютно бессмысленным их ваще никак не колышет.

gaylord
()
Ответ на: комментарий от gaylord

А вот что действительно сложно, так это сделать

То есть анон был прав, написать пять строчек скрипта для тебя несложно, а 15 уже на границе твоих способностей и ты хочешь кнопку «сделайте мне красиво».

Так никто никого не заставляет

Не заставляет, но вынуждают, голосуя фокусом своего внимания и подпевая «здесь просто всё работает, разбираться не нужно». Таких и окучивают, а вместе с вами и всех остальных.

И пердолиться приходится уже совсем другим людям. Например, поддерживающим Devuan. Опять же, не возражаю, не осуждаю, мне лишь кажется, что изначальная идея свободного софта, переворачивается с ног на голову.

anonymous
()
Ответ на: комментарий от anonymous

То есть анон был прав, написать пять строчек скрипта для тебя несложно, а 15 уже на границе твоих способностей и ты хочешь кнопку «сделайте мне красиво».

Есть некоторая граница, за которую я не хочу идти, конечно. Дистрибутив должен решать такие вопросы, как настройка DNS. Я не должен об этом думать в 2024 году. Это решанная задача, и решенная хорошою.

Не заставляет, но вынуждают, голосуя фокусом своего внимания и подпевая «здесь просто всё работает, разбираться не нужно». Таких и окучивают, а вместе с вами и всех остальных.

И не вынуждают, не придумывай. Если мы говорим про LOR, то какая разница, что тебе говорят? Если мы говорим про бизнес, то там вопрос «а что нам это дает?» остается неотвеченным. Пока что анонимус в этом треде смог придумать только две причины не любить системд:

  • ты чо не пацан скрипт написать не можешь
  • красная шапка в тебя пропихивает!111

Первый тейк это детский сад – взрослые люди не тратят свое время занимаясь ерундой в попытках выглядеть крутыми хакерами. Второй имеет под собой разумное зерно в том смысле, что всего одна реализация – это и правда нехорошо. В эту сторону худо-бедно копает dinit, но никак не Devuan.

И пердолиться приходится уже совсем другим людям.

А почему вдруг то, что хочется этим «другим людям» долнжна поддерживать… кстати кто? Шапка? Debian?

Например, поддерживающим Devuan. Опять же, не возражаю, не осуждаю, мне лишь кажется, что изначальная идея свободного софта, переворачивается с ног на голову.

Как это переворачивается, если вот она во всей красе. Эти люди решили, что не хотят страдать с systemd, пошли страдать с sysv. Исходники доступны, образы есть. Пользуйся – не хочу.

gaylord
()
Ответ на: комментарий от gaylord

И не вынуждают, не придумывай

как же не вынуждают, когда ты сам говоришь:

Он стал дефолтом почти везде ещё году в 2015

вот так и стал, что сил на его выкорчёвывание нужно чуть больше чем на то, чтоб смириться. как internet explorer когда-то дефолтом стал

детский сад

в попытках выглядеть крутыми хакерами

projecting much?

А почему вдруг то, что хочется этим «другим людям» долнжна поддерживать

ну точно, какие тут могут быть вопросы

anonymous
()
Ответ на: комментарий от anonymous

вот так и стал, что сил на его выкорчёвывание нужно чуть больше чем на то, чтоб смириться. как internet explorer когда-то дефолтом стал

Его дистрв сами выбрали, из никто не заставлял. Есть дистры, которые упорно поддерживают openrc или dinit. Разговор ни о чем.

gaylord
()
Ответ на: комментарий от gaylord

а чем systemd так плох

Раздутостью (полтора миллиона строк кода) и переусложнённостью (всякие там networkd, homed и т.д. - ну зачем они в системе инициализации, которая к тому же работает под максимальными привилегиями?) , уязвимости там постоянно находят - и я вот не хочу, чтобы мой линукс можно было хакнуть просто потому что его авторы пошли по пути наименьшего сопротивления и впендюрили энтот SystemD. Да и людям не нравится когда корпорации им что-то навязывают... о некоторых других причинах вы можете почитать на https://without-systemd.org/wiki/index_php/Arguments_against_systemd/ и https://nosystemd.org/

Он стал дефолтом почти везде ещё году в 2015, с тех прошло десять лет и мир не рухнул

Ну так же можно заявить что большинство пользуется виндой и мир не рухнул - получается, винда не так уж и плоха. Да, мир не рухнул - но мир мог бы быть и лучше, если бы люди не жертвовали ради сиюминутного удобства своими идеалами и вообще старались поступать не как удобнее а как правильнее

split dns

«systemd-resolved is not the only software available that implements split DNS. Previously, the most popular solution for this was to use dnsmasq» - это писали ещё в 2020 году, видимо есть альтернативные решения для вашей задачи

необходимости страдать с кучей шелл-скриптов

мне на без'SystemD'шных дистрибутивах не приходится возиться ни с какими шелл скриптами, и вообще чисто по пользовательским ощущениям - за исключением необходимости раз в год вспоминать какой там эквивалент команды в OpenRC/runit для SystemD'шного systemctl - я не испытываю никаких дополнительных неудобств, только приятное чувство что я использую «правильный» дистрибутив не подверженный уязвимостям SystemD

SakuraKun ★★★★★
()
Ответ на: комментарий от SakuraKun

Раздутостью

А чем это плохо? Где в этом проблема? Там много кода, потому что там много полезных фичей.

ну зачем они в системе инициализации

systemd это не система инициализации, это core OS services.

уязвимости там постоянно находят

Их в и coreutils находят. Сколько их в systemd нашли, штук 50 за всю историю проекта? Так это ваще годный код, учитывая объем.

Ну так же можно заявить что большинство пользуется виндой и мир не рухнул - получается, винда не так уж и плоха.

Ну так она и неплоха. Только сектанты орут что винда плохая, по факту это гораздо более стабильная ОС чем десктопный лялекс.

это писали ещё в 2020 году, видимо есть альтернативные решения для вашей задачи

Да, только они всратые. dnsmasq это такой швейцарский нож для DNS/DHCP/TFTP. Чтобы он работал как тебе нужно, нужно его настраивать, писать конфиги, писать конфиги для конфигов шелл скрипты и потом все это отлаживать, когда апстрим все сломает. Зачем все это нужно, если есть унифицированное решение, с хорошим интерактивным CLI и которое везде работает одинаково, поддерживается авторами NM, connman, dhcpcd и прочими? Чтобы потратить время на задачу, привет у которой уже есть хорошее решение?

мне на без’SystemD’шных дистрибутивах не приходится возиться ни с какими шелл скриптами, и вообще чисто по пользовательским ощущениям - за исключением необходимости раз в год вспоминать какой там эквивалент команды в OpenRC/runit для SystemD’шного systemctl - я не испытываю никаких дополнительных неудобств, только приятное чувство что я использую «правильный» дистрибутив не подверженный уязвимостям SystemD

Ну так и ок, значит твои юзкейсы этого не требуют.

gaylord
()
Ответ на: комментарий от gaylord

Каждая строчка кода с ненулевой вероятностью содержит уязвимость (втройне критично для процесса с PID 1), поэтому зачем лишняя Attack Surface в полтора миллиона строк кода если можно обойтись даже тысячью? (см. runit)

Сколько их в systemd нашли, штук 50 за всю историю проекта? Так это ваще годный код, учитывая объем

Чуть больше ста, если считать только те о которых известно публично. Учитывая наплевательское отношение к безопасности авторов SystemD, за которое они даже получали анти-награду Pwnie Award, тут сложно быть оптимистом

винда ... гораздо более стабильная ОС чем десктопный лялекс

Разумеется, о стабильности вы пишете по вашему опыту с SystemD'шными дистрибутивами, т.к. свежих не-SystemD вы судя по всему и не пробовали ;-) Уверяю вас, мой десктопный Artix работает как часы и не припомню ни единого обрыва глюка за прошедший год - несмотря на то что является свежим Rolling Release как и арч; при этом ко мне частенько обращаются с виндовыми вопросами, хотя сам я винду давным-давно не юзаю

dnsmasq

Сам я им не пользовался, в интернетах пишут что: NetworkManager его хорошо поддерживает; с connman/dhcpcd по крайней мере у некоторых пользователей были взаимные конфликты пару лет назад, но возможно эти проблемы уже решены. + Помимо dnsmasq есть альтернативные варианты, тот же Gatekeeper на первый взгляд выглядит вполне прилично, даже няшную GUI'шку сделали

потратить время на задачу, у которой уже есть хорошее решение?

да, если хочется поступить как правильнее, а не плыть по течению и довольствоваться тем что есть

SakuraKun ★★★★★
()
Ответ на: комментарий от SakuraKun

Каждая строчка кода с ненулевой вероятностью содержит уязвимость (втройне критично для процесса с PID 1), поэтому зачем лишняя Attack Surface в полтора миллиона строк кода если можно обойтись даже тысячью? (см. runit)

Но ведь PID1 не содержит полтора миллиона строк? systemd разбит на отдельные процессы.

Чуть больше ста, если считать только те о которых известно публично. Учитывая наплевательское отношение к безопасности авторов SystemD, за которое они даже получали анти-награду Pwnie Award, тут сложно быть оптимистом

Если ты погуглин а mitre, то там половина совпадений это «мы нашли баг в ядре вот stack strace», а там udevd.

Учитывая наплевательское отношение к безопасности авторов SystemD, за которое они даже получали анти-награду Pwnie Award, тут сложно быть оптимистом

Почему сложно? Смотри, оценка очень простая: systemd стоит на всех продакшон системах уже десять лет. Сколько раз за это время доступ к системе получили через уязвимости в systemd?

Сам я им не пользовался, в интернетах пишут что: NetworkManager его хорошо поддерживает; с connman/dhcpcd по крайней мере у некоторых пользователей были взаимные конфликты пару лет назад, но возможно эти проблемы уже решены. + Помимо dnsmasq есть альтернативные варианты, тот же Gatekeeper на первый взгляд выглядит вполне прилично, даже няшную GUI’шку сделали

А я им пользовался. Это неудобно. dnsmasq ваще хорош как способ себе виртуальную сеть организовать с VM и прочим блудом. Или воткнуть в WiFi. Но на десктопе это отвратительно неудобно. Я понмимаю зачем это делали в 2010 году, когда systemd ещё толком не было. Я не понимаю зачем в это идти сейчас, когда он есть.

да, если хочется поступить как правильнее, а не плыть по течению и довольствоваться тем что есть

Так оно хуже получается, в том-то и дело. Использовать systemd-resolved проще и удобнее, чем альтернативы. Поэтому это правильное решение задачи – ты не тратишь свое время настройку DNS, все работает в динамике, детей в жертву приносить не потребовалось. Если что-то сломалось, это, скорее всего, заметит кто-то сильно раньше тебя и все починят. Минусы-то где?

gaylord
()
Ответ на: комментарий от gaylord

Только сектанты орут что винда плохая, по факту это гораздо более стабильная ОС чем десктопный лялекс.

Так и продолжай ей пользоваться. Зачем ты выбрал такой путь, быть неосилятором, но орать что всё что ты не осилил должен системд делать одной кнопкой. По итогу требуя чтоб для тебя любую ос превратили в виндовс.

anonymous
()
Ответ на: комментарий от anonymous

Так и продолжай ей пользоваться. Зачем ты выбрал такой путь, быть неосилятором, но орать что всё что ты не осилил должен системд делать одной кнопкой. По итогу требуя чтоб для тебя любую ос превратили в виндовс.

Разверни мысль, что ли. Как работающий из коробки split DNS превращает ос в виндовс.

gaylord
()
Ответ на: комментарий от anonymous

Зачем ты выбрал такой путь

целых две причины у него:

  • за виндовс пацаны во дворе засмеют
  • одноклассники не поверят в рассказы, что он крутой хакер
anonymous
()
Ответ на: комментарий от gaylord

Он всегда пальцы в двери суёт, и разговаривает тут сам с собой, чтобы забайтить на сустемд-срач (в теме про вяленный срач, комбо).

Он уже пришил тебе бирку «сустемд-подсос»; не удивляйся, это то, что случается, когда при создании треда решил/забыл не выключать онанима.

Set440
() автор топика
Ответ на: комментарий от anonymous

гтфо

Вот именно, что я не забыл. По своей наивности подумал, что аноним тоже человек… эхх…

Set440
() автор топика
Последнее исправление: Set440 (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

И кто из них при этом рухнет? И вообще, если драйвер скахет серверу «не могу выделить, памяти нет» - отработает ли он это без сгфолта? Клиенты так не умеют.

Что не умеют? Причем тут сегфолт? Если тебе не дали буфера, ты можешь делать все что угодно, включая:

  1. Ничего, ждать нового
  2. Выйти с ошибкой
gaylord
()
Ответ на: комментарий от kirill_rrr

Если кто-то считает что на нехватке памяти на падать в сегфолт, а не выходить с ошибкой – он баклажан. Но это его право быть баклажаном, интефрейс тут ваще не при чем. Напискать вот так ваще не сложно:

if (!buf)
    errx(1, "out of GPU resources LMAO");
gaylord
()
Ответ на: комментарий от kirill_rrr

Но это на уровне драйвера.

Драйвера умеют возвращать ошибку когда при попытке выделения видеопамяти, её не хватает. Vulkan уж точно умеет. Соответственно тулкит может обрабатывать ошибку и переключаться на shmem.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от kirill_rrr

Но что если так начнёт вести себя сервер?

Аналогично, переключаться на использование shmem. Двже если клиент передал буфер в видеопамяти, можно сконвертировать его в shmem. Так что претензии к авторам конкретного сервера/композитора.

X512 ★★★★★
()
Ответ на: комментарий от gaylord

Но ведь PID1 не содержит полтора миллиона строк?

Действительно, эти полтора миллиона строк вряд ли все находятся в самом PID 1 - но даже если они вынесены в отдельные процессы, они так же являются привилегированными (либо сами по себе, либо постоянно просят PID 1 «сделать что-то админское») для выполнения системных функций - и в итоге у нас всё так же имеется гигантский «сгусток» кода, который творит что ему заблагорассудится и который (ввиду его объёма) невозможно обозреть в одиночку, в отличие от куда более минималистичных альтернативных систем инициализации

Если ты погуглин а mitre, то там половина совпадений это «мы нашли баг в ядре вот stack strace», а там udevd.

да, в реальности их раза в два меньше - но даже эти ~50 куда больше чем у альтернативных систем инициализации: даже если считать у них все результаты по CVE, openrc - 4, runit - 3, sysvinit - 1, dinit - 0. Получается, что например при переходе с Arch на Artix обычный пользователь получает в десятки раз более безопасный инит, и при этом без каких-либо очевидных жертв: все привычные пакеты всё так же устанавливаются через pacman, а благодаря «заглушкам» весь софт завязанный на SystemD - работает, даже проприетарщина вроде Steam

systemd стоит на всех продакшон системах уже десять лет. Сколько раз за это время доступ к системе получили через уязвимости в systemd?

Хакеры, как и фокусники, не особо горят желанием раскрывать свои секреты - более того, они зачастую стремятся чтобы жертва вообще не узнала что её хакнули. Но новости вида SystemD bug lets attackers hack Linux boxes via malicious DNS packets время от времени проскакивают

systemd-resolved проще и удобнее, чем альтернативы. Поэтому это правильное решение задачи

Учитывая стремление к безопасности, минимализму и т.д. - решение systemd-resolved может быть и проще воплотить в жизнь (в зависимости от предварительного опыта), но это не будет правильнее чем через альтернативные варианты, даже если придётся с ними немного помучится чтобы достигнуть аналогичного результата

Это все равно что писать на чистом Си вместо питона или даже плюсов: возможно, на создание программы уйдёт больше времени (опять же в зависимости от опыта), но зато она будет работать куда быстрее чем питон, а её код - более портативным чем плюсы, да и область применения куда шире (не зря ведь на Си пишут и ядра операционных систем и опенсорсный БИОС coreboot / прочие прошивки), поэтому я считаю Си'шные программы более «правильными»

В-общем: не знаю, можешь ли ты согласиться с преимуществами альтернативных систем инициализации, но по крайней мере их использование в некоторых дистрибутивах Linux выглядит куда более достойным техническим обоснованием их существования чем нескучные обои/настройки. Даже для Linux Mint - и то призадумаешься, прежде чем вспомнишь чем он отличается от Ubuntu, что уж тут говорить о большинстве дистрибутивов средней руки - которые только на словах «не такие как все», а по факту даже в вопросе системы инициализации решили плыть по течению...

SakuraKun ★★★★★
()
Ответ на: комментарий от SakuraKun

Действительно, эти полтора миллиона строк вряд ли все находятся в самом PID 1 - но даже если они вынесены в отдельные процессы, они так же являются привилегированными (либо сами по себе, либо постоянно просят PID 1 «сделать что-то админское») для выполнения системных функций - и в итоге у нас всё так же имеется гигантский «сгусток» кода, который творит что ему заблагорассудится и который (ввиду его объёма) невозможно обозреть в одиночку, в отличие от куда более минималистичных альтернативных систем инициализации

Так это… если тебе не нужен systemd-networkd – он выключен по дефолту. Если тебе не нужен systemd-resolved – он выключен по дефолту. Если тебе не нужен systemd-homed… ты понял.

Помимо PID1 у меня запущены следующие:

root         /usr/lib/systemd/systemd-journald
root         /usr/lib/systemd/systemd-udevd
systemd+     /usr/lib/systemd/systemd-networkd
systemd+     /usr/lib/systemd/systemd-resolved
systemd+     /usr/lib/systemd/systemd-timesyncd
root         /usr/lib/systemd/systemd-logind

Во-первых, не все работает от рута, во-вторых, на системе с любым другим инитом все эти процессы будут иметь альтернативы в виде других процессов с тем же уровнем привилегий. И в них тоже будут баги. Скока memory corruption багов было найдено в rsyslogd я даже вспоминать не хочу.

да, в реальности их раза в два меньше - но даже эти ~50 куда больше чем у альтернативных систем инициализации: даже если считать у них все результаты по CVE, openrc - 4, runit - 3, sysvinit - 1, dinit - 0. Получается, что например при переходе с Arch на Artix обычный пользователь получает в десятки раз более безопасный инит, и при этом без каких-либо очевидных жертв: все привычные пакеты всё так же устанавливаются через pacman, а благодаря «заглушкам» весь софт завязанный на SystemD - работает, даже проприетарщина вроде Steam

Ты постоянно говоришь «системы инициализации». Но systemd НЕ СИСТЕМА ИНИЦИАЛИЗАЦИИ. Поэтому количество багов в systemd тебе надо сравнивать с совокупным количеством багов в rsyslogd, syslog-ng, ntpd, network manager, dnsmasq и прочими. И тогда ситуации становится уже не такой однозначной.

Хакеры, как и фокусники, не особо горят желанием раскрывать свои секреты - более того, они зачастую стремятся чтобы жертва вообще не узнала что её хакнули. Но новости вида SystemD bug lets attackers hack Linux boxes via malicious DNS packets время от времени проскакивают

Согласен, нехорошо. Такое же было в резолвере glibc.

Учитывая стремление к безопасности, минимализму и т.д. - решение systemd-resolved может быть и проще воплотить в жизнь (в зависимости от предварительного опыта), но это не будет правильнее чем через альтернативные варианты, даже если придётся с ними немного помучится чтобы достигнуть аналогичного результата

Альтернативные варианты это dnsmasq, в котором тоже были такие же дыры и glibc, в котором то же были такие же дыры.

В-общем: не знаю, можешь ли ты согласиться с преимуществами альтернативных систем инициализации, но по крайней мере их использование в некоторых дистрибутивах Linux выглядит куда более достойным техническим обоснованием их существования чем нескучные обои/настройки. Даже для Linux Mint - и то призадумаешься, прежде чем вспомнишь чем он отличается от Ubuntu, что уж тут говорить о большинстве дистрибутивов средней руки - которые только на словах «не такие как все», а по факту даже в вопросе системы инициализации решили плыть по течению…

Я не понимаю почему мы сравниваем systemd с dinit, если долнжы сравнивать с ещё кучей софта.

gaylord
()
Ответ на: комментарий от gaylord

Просто ещё недавно не уметь свопить видеопамять в оперативку было моветоном. Ну это примерно как запросить RAM и буть убитым по out of memory - реально только на 32-битном приложении.

kirill_rrr ★★★★★
()
Ответ на: комментарий от X512

Так что претензии к авторам конкретного сервера/композитора.

Возможно так, но тогда получается что очень много авторов резко стали криворукими и у них повторяется одна и та же ошибка.

kirill_rrr ★★★★★
()