Комментарии 61
~60 000 000 строк кода, ~40 000 файлов, если читать 1 строчку за секунду 12 часов в день, можно прочитать все исходники за ~5 месяцев…
+45
— Дети, что вы прочитали летом?
— Войну и мир!
— Петр Первый!
— Тихий дон!
— Исходники ядра Linux 3.10…
— Войну и мир!
— Петр Первый!
— Тихий дон!
— Исходники ядра Linux 3.10…
+46
«Исходники ядра Linux. Краткое содержание»
+22
… и нашел несколько багов, которые успешно продал. Мариванна, эта нефритовая указка — вам!
-13
НЛО прилетело и опубликовало эту надпись здесь
Ну не все же время читать! «Чукча не читатель — чукча писатель!»
-5
Если читать по 2 строчки в секунду, то можно успеть.
0
В первоисточнике всё же не «Тихий дон», а «Тихий Дон».
«Тихий дон» — это про итальянскую мафию что-то.
«Тихий дон» — это про итальянскую мафию что-то.
0
sysop@cdecl.ru0:58 (8 мин. назад)
кому: мне
Добрый вечер!
Не имея возможности написать на хабр, укажу на одну досадную ошибку в содержимом и попрошу Вас любезно переадресовать этот багрепорт по адресу.
habrahabr.ru/post/183560/ — Линус говорит о том, что ядро содержит 16 (шестнадцать) миллионов строк кода, а не шестьдесят, как указано в переводе. На видео в статье (06:03) отчётливо слышно "..is slightly bigger, we're about sixteen million lines of code", что подтверждается статистикой с ohloh (http://www.ohloh.net/p/linux).
Из-за этой досадной неточности продолжат появляться априори некорректные, но заплюсованные комментарии (к примеру — habrahabr.ru/post/185178/#comment_6439388).
www.youtube.com/watch?v=yVpbFMhOAwE — вот еще одно видео для подтверждения
+8
«Поддержка ускорения декодирования видео с использованием аппаратного декодера UVD, встроенного в современные GPU AMD, была добавлена в [bold]DRM-модуль Radeon[/bold]»
Просветите пожалуйста, значит ли это, что в ядре используются блобы?
Или этот DRM-модуль от Radeon open source?
Просветите пожалуйста, значит ли это, что в ядре используются блобы?
Или этот DRM-модуль от Radeon open source?
0
0
Вторая ссылка неактуальна (пересборка не нужна). В данный момент чтобы задействовать UVD в Raring нужно:
1. Собственно накатить ядро 3.10: kernel.ubuntu.com/~kernel-ppa/mainline/v3.10-saucy/
2. В /lib/firmware/radeon/ закинуть обновлённые прошивки для используемой видеокарты и добавить прошивку для UVD.
Обновлённые прошивки брать здесь: people.freedesktop.org/~agd5f/radeon_ucode/
Какие прошивки брать: wiki.gentoo.org/wiki/Radeon#Firmware
3. Обновиться из ppa:oibaf/graphics-drivers и установить libg3dvl-mesa (обновиться можно и из ppa:xorg-edgers/ppa но libg3dvl-mesa из Oibaf PPA всё равно понадобится).
Перезагрузитесь и проверьте вывод «dmesg | grep UVD» а так же vdpauinfo.
В Saucy должно будет работать из коробки.
1. Собственно накатить ядро 3.10: kernel.ubuntu.com/~kernel-ppa/mainline/v3.10-saucy/
2. В /lib/firmware/radeon/ закинуть обновлённые прошивки для используемой видеокарты и добавить прошивку для UVD.
Обновлённые прошивки брать здесь: people.freedesktop.org/~agd5f/radeon_ucode/
Какие прошивки брать: wiki.gentoo.org/wiki/Radeon#Firmware
3. Обновиться из ppa:oibaf/graphics-drivers и установить libg3dvl-mesa (обновиться можно и из ppa:xorg-edgers/ppa но libg3dvl-mesa из Oibaf PPA всё равно понадобится).
Перезагрузитесь и проверьте вывод «dmesg | grep UVD» а так же vdpauinfo.
В Saucy должно будет работать из коробки.
+4
В Gentoo проще:
1. Размаскировать свежий radeon-ucode и gentoo-sources.(пара строчек в /etc/portage/package.keywords с именами пакетов).
2. Обновить эти самые пакеты.
3. Собрать ядро через make && make install && make modules_install или genkernel all.
1. Размаскировать свежий radeon-ucode и gentoo-sources.(пара строчек в /etc/portage/package.keywords с именами пакетов).
2. Обновить эти самые пакеты.
3. Собрать ядро через make && make install && make modules_install или genkernel all.
+2
Сравнили роллинг с убунтой — день прожит не зря.
0
Вот поэтому и ушёл с ubuntu, что надоело каждые пол года красноглазить и разбираться с системой. А тут всё по накатаной идёт.
+4
Вы говорите так, как будто поддержку декодирования видео в свободные драйвера каждые полгода добавляют.
0
Каждые пол года выходит новый релиз Ubuntu и есть два варианта: оставаться на старом софте, либо перетрясать репозитории на предмет возможности перехода на новую ветку, отключения ненужных и прочие радости апгрейда. Как показала практика, сторонних репозиториев накапливается достаточно много и не всегда их авторы быстро реагируют на новые версии Ubuntu.
В Gentoo у меня подключено всего три оверлея: для плеера Deadbeef, для java и для игр (в том числе Steam). И мне не нужно заботится подходят они или нет к моей системе. Они просто подходят.
В Gentoo у меня подключено всего три оверлея: для плеера Deadbeef, для java и для игр (в том числе Steam). И мне не нужно заботится подходят они или нет к моей системе. Они просто подходят.
+1
Справедливости ради надо заметить, что при попытке собрать старый софт вылезают некоторые траблы с зависимостями. Бывает и наоборот, один из недавних моих примеров: при попытке собрать octave напоролся на то, что в зависимостях у него стоит любой cblas, но тот, что помечен стабильным слишком стар и тянет за собой еще eselect-blas, но это конфликтует с другим пакетом. В итоге пока не размаскировал новый cblas со сборкой были проблемы.
0
> либо перетрясать репозитории на предмет возможности перехода на новую ветку
Зачем это делать? Версия софтины в новой Ubuntu новее или такая же — всё нормально, она обновится вместе с дистрибутивом и будет работать. Версия софтины в новой Ubuntu старше, чем уже установленная из PPA — она не обновится и будет работать. Всё.
Не, конечно вы сейчас приведёте пример из разряда редких исключений, но вам такой же и для Генты привели.
> отключения ненужных
Она автоматом отключаются. Привет.
Зачем это делать? Версия софтины в новой Ubuntu новее или такая же — всё нормально, она обновится вместе с дистрибутивом и будет работать. Версия софтины в новой Ubuntu старше, чем уже установленная из PPA — она не обновится и будет работать. Всё.
Не, конечно вы сейчас приведёте пример из разряда редких исключений, но вам такой же и для Генты привели.
> отключения ненужных
Она автоматом отключаются. Привет.
0
еще можно использовать Ubuntu LTS
0
Не путайте Direct Rendering Manager и Digital Rights Management.
+23
«Добавлена поддержка протокола RDMA (iSER) в подсистему iSCSI;»
За это отдельное спасибо.
За это отдельное спасибо.
+2
> Можно запретить выполнять скрипты как программы — функционал запуска скриптов, содержащие путь к интерпретатору в заголовке "#!", теперь может быть собран в виде модуля ядра
Можно поподробнее или ссылку на описание?
Можно поподробнее или ссылку на описание?
+1
Раньше функция load_script() была просто функцией в ядре системы, а теперь ее вынесли в отдельный модуль, который можно отключить.
Вот эта функция, если что:
Вот эта функция, если что:
Скрытый текст
static int load_script(struct linux_binprm *bprm)
{
const char *i_arg, *i_name;
char *cp;
struct file *file;
char interp[BINPRM_BUF_SIZE];
int retval;
if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
return -ENOEXEC;
/*
* This section does the #! interpretation.
* Sorta complicated, but hopefully it will work. -TYT
*/
allow_write_access(bprm->file);
fput(bprm->file);
bprm->file = NULL;
bprm->buf[BINPRM_BUF_SIZE — 1] = '\0';
if ((cp = strchr(bprm->buf, '\n')) == NULL)
cp = bprm->buf+BINPRM_BUF_SIZE-1;
*cp = '\0';
while (cp > bprm->buf) {
cp--;
if ((*cp == ' ') || (*cp == '\t'))
*cp = '\0';
else
break;
}
for (cp = bprm->buf+2; (*cp == ' ') || (*cp == '\t'); cp++);
if (*cp == '\0')
return -ENOEXEC; /* No interpreter name found */
i_name = cp;
i_arg = NULL;
for (; *cp && (*cp != ' ') && (*cp != '\t'); cp++)
/* nothing */;
while ((*cp == ' ') || (*cp == '\t'))
*cp++ = '\0';
if (*cp)
i_arg = cp;
strcpy (interp, i_name);
/*
* OK, we've parsed out the interpreter name and
* (optional) argument.
* Splice in (1) the interpreter's name for argv[0]
* (2) (optional) argument to interpreter
* (3) filename of shell script (replace argv[0])
*
* This is done in reverse order, because of how the
* user environment and arguments are stored.
*/
retval = remove_arg_zero(bprm);
if (retval)
return retval;
retval = copy_strings_kernel(1, &bprm->interp, bprm);
if (retval < 0) return retval;
bprm->argc++;
if (i_arg) {
retval = copy_strings_kernel(1, &i_arg, bprm);
if (retval < 0) return retval;
bprm->argc++;
}
retval = copy_strings_kernel(1, &i_name, bprm);
if (retval) return retval;
bprm->argc++;
retval = bprm_change_interp(interp, bprm);
if (retval < 0)
return retval;
/*
* OK, now restart the process with the interpreter's dentry.
*/
file = open_exec(interp);
if (IS_ERR(file))
return PTR_ERR(file);
bprm->file = file;
retval = prepare_binprm(bprm);
if (retval < 0)
return retval;
return search_binary_handler(bprm);
}
{
const char *i_arg, *i_name;
char *cp;
struct file *file;
char interp[BINPRM_BUF_SIZE];
int retval;
if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
return -ENOEXEC;
/*
* This section does the #! interpretation.
* Sorta complicated, but hopefully it will work. -TYT
*/
allow_write_access(bprm->file);
fput(bprm->file);
bprm->file = NULL;
bprm->buf[BINPRM_BUF_SIZE — 1] = '\0';
if ((cp = strchr(bprm->buf, '\n')) == NULL)
cp = bprm->buf+BINPRM_BUF_SIZE-1;
*cp = '\0';
while (cp > bprm->buf) {
cp--;
if ((*cp == ' ') || (*cp == '\t'))
*cp = '\0';
else
break;
}
for (cp = bprm->buf+2; (*cp == ' ') || (*cp == '\t'); cp++);
if (*cp == '\0')
return -ENOEXEC; /* No interpreter name found */
i_name = cp;
i_arg = NULL;
for (; *cp && (*cp != ' ') && (*cp != '\t'); cp++)
/* nothing */;
while ((*cp == ' ') || (*cp == '\t'))
*cp++ = '\0';
if (*cp)
i_arg = cp;
strcpy (interp, i_name);
/*
* OK, we've parsed out the interpreter name and
* (optional) argument.
* Splice in (1) the interpreter's name for argv[0]
* (2) (optional) argument to interpreter
* (3) filename of shell script (replace argv[0])
*
* This is done in reverse order, because of how the
* user environment and arguments are stored.
*/
retval = remove_arg_zero(bprm);
if (retval)
return retval;
retval = copy_strings_kernel(1, &bprm->interp, bprm);
if (retval < 0) return retval;
bprm->argc++;
if (i_arg) {
retval = copy_strings_kernel(1, &i_arg, bprm);
if (retval < 0) return retval;
bprm->argc++;
}
retval = copy_strings_kernel(1, &i_name, bprm);
if (retval) return retval;
bprm->argc++;
retval = bprm_change_interp(interp, bprm);
if (retval < 0)
return retval;
/*
* OK, now restart the process with the interpreter's dentry.
*/
file = open_exec(interp);
if (IS_ERR(file))
return PTR_ERR(file);
bprm->file = file;
retval = prepare_binprm(bprm);
if (retval < 0)
return retval;
return search_binary_handler(bprm);
}
+2
А в чём смысл запрещать выполнение скриптов, всегда же можно сделать /bin/sh script.sh и он выполняется даже без +x?
+1
А с какими правами? Видимо, идея в том, чтобы закрыть дыру с правами на исполняемые скрипты.
0
В плане? Если есть права на чтение, то я что угодно смогу скормить sh. Конечно, есть варианты, когда есть на чтение, но нет на исполнение, но это экзотика какая-то. Ну и не понятно чем скрипты хуже чем ELF.
0
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
commit 2535e0d723e4d7723b030f39fb350e436bdb983f
Author: Josh Triplett <josh@joshtriplett.org>
Date: Tue Apr 30 15:27:44 2013 -0700
fs: make binfmt support for #! scripts modular and removable
Add a new configuration option CONFIG_BINFMT_SCRIPT to configure support
for interpreted scripts starting with "#!"; allow compiling out that
support, or building it as a module. Embedded systems running exclusively
compiled binaries could leave this support out, and systems that don't
need scripts before mounting the root filesystem can build this as a
module.
Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+1
>Интегрирована разработанная и используемая в Google система Bcache
а вот это интересно
а вот это интересно
0
Отличные новости! Можно пересобирать ядро с новыми плюшками.
0
Ядро можно собирать компилятором Clang благодаря подготовленным проектом LLVMLinux патчам;
Надо попробовать свой calculate linux перевести на clang, по идее это должно нехило сократить время обновление мира. Но может есть уже такие?
+1
Вроде как производительность проигрывает gcc пока.
0
Если не затруднит, поделитесь последним бенчмаркингом, а то все что находил от 11 года или старше.
0
Вот, например, майские тесты GCC 4.8.0 vs. Clang последних версий [фороникс, да]. Clang уже почти везде хорошо выглядит, но все еще сливает на OpenMP-кейсах.
0
Ну я свои программы тестировал, там линейная алгебра в основном, было медленнее. Но это было с год назад где-то.
0
Уже совсем скоро мечта о Linux 3.11 станет явью…
+30
А на чем сам Торвальдс сидит? Федора, Убунту?
Хочется уже не только стабильное ядро, но и стабильный дистрибутив со стабильным DE…
На убунте постоянно скайп крашится ни с того ни с сего… и tray iconки через раз в углу отображаются :(
На виндовс все равно не променяю, но хочется все таки чтобы хотя бы такой примитив как notification area был нормально отлажен.
Хочется уже не только стабильное ядро, но и стабильный дистрибутив со стабильным DE…
На убунте постоянно скайп крашится ни с того ни с сего… и tray iconки через раз в углу отображаются :(
На виндовс все равно не променяю, но хочется все таки чтобы хотя бы такой примитив как notification area был нормально отлажен.
0
Debian 6, как вариант стабильного дистрибутива?
0
Была инфа что федора
0
1. на убунте надо ставить скайп из партнёрского репозитория
2. надо ставить пакет skype
3. для работы индикатора скайпа надо установить sni-qt:i386
P.S. только недавно разбирался с братом почему у него скайп выбивает, он после арч линукса очень много делает вручную, хотя в убунте надо просто использовать нормальные репозитории.
2. надо ставить пакет skype
3. для работы индикатора скайпа надо установить sni-qt:i386
P.S. только недавно разбирался с братом почему у него скайп выбивает, он после арч линукса очень много делает вручную, хотя в убунте надо просто использовать нормальные репозитории.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Вышло ядро Linux 3.10