LINUX.ORG.RU
ФорумTalks

Что делать, если все бинарники вдруг исчезнут?

 , , ,


0

1

Навеяно этой темой.

Предлагаю гипотетическую ситуацию: какой-то мега-вирус удалил все бинарники со всех дисков, флэшек, прошивок, биосов и т. д. на всех компах, телефонах, смартфонах, планшетах и т. д. При этом исходники остались. Также само железо не пострадало. Как в такой ситуации реанимировать софт?

Угу, ты ещё подумай, что произойдёт если весь литий распадётся на элементарные частицы. Отличная задачка для мозга, которому совсем нехрен делать.
А твой вопрос имеет тривиальный ответ. Скомпилировать исходники обратно. Как, если нет бинарников? Руками. Напишем заново ассемблер, потом на ассемблере напишем компилятор Си, а потом на Си напишем всё остальное.
За вброс три с минусом.

MimisGotAPlan
()

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

i-rinat ★★★★★
()

1. Обратиться в ПНД.
2. Следовать указаниям врачей
3. ???????
4. PROFIT

Inshallah
()

все бинарники вдруг исчезнут
При этом исходники остались

/0. Текстовые файлы — подмножество бинарников.

h578b1bde ★☆
()

20:00 - сегодня лягу пораньше
04:00 - интересно, а когда колобок катится, у него глаза пачкаются?

ioway
()

А если все электричество пропадет на земле из-за какого-нибудь вселенского катаклизма? Идея не моя, еще в 40-каком-то году американский фантаст обыгрывал такое (нашёл: Браун, Фредерик; «Волновики» / англ. The Waveries, январь 1945, https://fantlab.ru/work63360).

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

А если там хитрая тайм-бомба или еще какой метод защиты?

mandala ★★★★★
()
Ответ на: комментарий от i-rinat

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

И тут же отвечу MimisGotAPlan на его близкую по смыслу реплику

Руками. Напишем заново ассемблер, потом на ассемблере напишем компилятор Си, а потом на Си напишем всё остальное.

На самом деле вопрос с подвохом. Как говорил Томпсон ещё в 1983 году:

Кен Томпсон, Лекции лауреатов премии тьюринга, лекция за 1983 год

На рис. 2.1 представлен фрагмент программы компилятора Си, в котором интерпретируются управляющие последовательности символов. Это удивительный фрагмент. Он «знает» полностью переносимым образом, какой код символа компилируется для новой строки в любой кдировке символов. Этот элемент знания позволяет ему перекомпилировать себя, увековечив таким образом знание.

Предположим, мы хотим изменить компилятор Си, чтобы включить управляющую последовательность «\v» для представления символа вертикальной табуляции. Расширение фрагмента 2.1 очевидно и представлено на рис. 2.2. Затем мы заново компилируем компилятор Си, но получаем сообщение об ошибке. Ясно, что поскольку компилятор Си в готовом виде ничего не знает о «\v», исходная программа не является правильной программой на языке Си. Заглянув в таблицу кодировки символов ASCII, мы находим, что код вертикальной табуляции - десятичное 11. Мы изменяем нашу исходную программу , как показано на рис. 2.3. Теперь старый компилятор компилирует новый исходный текст без ошибок. Мы устанавливаем полученную готовую программу как новую официальную версию компилятора Си и теперь можем написать мобильную версию, как это сделано на рис. 2.2.

Рис. 2.1.

c = next();
if(c != '\\')
  return(c);
c = next();
if(c == '\\')
  return(c);
if(c == 'n')
  return('\n');

Рис. 2.2.

c = next();
if(c != '\\')
  return(c);
c = next();
if(c == '\\')
  return(c);
if(c == 'n')
  return('\n');
if(c == 'v')
  return '\v';

Рис. 2.3.

c = next();
if(c != '\\')
  return(c);
c = next();
if(c == '\\')
  return(c);
if(c == 'n')
  return('\n');
if(c == 'v')
  return 11;

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

А с 83-его прошло, слава богу, два раз по 17 лет, так что сколько уже такого исходного кода, «ссылающегося на самого себя», понаписано, и изначальных исходников в ряде случаев уже и не отыскать. Так что, боюсь, «простеньким загрузчиком» и заново написанным ассемблером тут не обойтись. Даже сейчас нетривиальный код порой с трудом компилируется компиляторами, для которых он не создавался, а то и вовсе не компилируется (даже если все компиляторы стандартные и, естественно, для одного языка).

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

А что будет если произойдёт очередная вспышка на соНце, и выгорит вся электроника, от электромагнитного импульса?

Что будут делать программисты?

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

Ну катаклизм будет. Все встанет, все крутые программеры будут обучать вебмакак писать нормальный код. Лет за 5 управимся, зато всё перепишем с нуля!

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

Ладно. В таком случае пойду переконвертирую все свои бинарники в base64 и распечатаю на бумаге.

Это вариант. Но он сработает только если это предусмотреть заранее, чего делать, понятно, никто не будет.

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

Пойдут пахать землю, чтоб жрать. Тут потребуется лет 15 на восстановление, может меньше. Вот если все люди забудут всё — будет веселее намного.

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

все крутые программеры будут обучать вебмакак писать нормальный код. Лет за 5 управимся, зато всё перепишем с нуля!

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

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

но и от наличия у нас работающей техники. И это грустно.

Это нормально. Так было ещё со времён человекоподобных обезьян, которые стали использовать инструмент сложнее палки-копалки. Сломалась палка-копалка — всё, жопа. И несколько поколений человекоподобных обезьяноучёных изобретают палку-копалку.
Думаешь дальше стало лучше? Да средневековый крестьянин вполне себе мог сдохнуть от голода сломайся у него плуг/мотыга и не окажись рядом кузнеца.
Тык было и так будет. Всё нормально.

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

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

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

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

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

Руками. Напишем заново ассемблер, потом на ассемблере напишем компилятор Си

Есть путь проще - компиляторы компиляторов. Даже «современный» С89 на ассемблере будешь тысячу лет писать.

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

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

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

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

Возможно, но очень неэффективно.

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

aureliano15 ★★
() автор топика

Предлагаю гипотетическую ситуацию: какой-то мега-вирус удалил все бинарники со всех дисков, флэшек, прошивок, биосов и т. д. на всех компах, телефонах, смартфонах, планшетах и т. д.

Ну и фантазия у тебя.

При этом исходники остались.

Очень жаль. А то был бы замечательный повод наконец забить полностью на всё legacy и сделать с нуля хорошо.

Как в такой ситуации реанимировать софт?

Поэтапно. Вручную надырявив на перфокартах (не обязательно, немного утрирую) хоть что-то, что позволит загрузить хоть что-то, так же налабав простенький ассемблер, на котором уже собрать более полноценный ассемблер, на котором написать компилятор хоть чего-нибудь. А дальше постепенно-постепенно компилять всё, что компиляется, совершенствуя компиллятор.

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

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

Неа. Что за бред ты несёшь? Знания всегда было потерять очень просто, потому что знания не записаны только на бумаге. Они в людях, а люди имеют тенденцию стареть и забывать. Бумажные книги только делают процесс обучения немного проще.

i-rinat ★★★★★
()
Ответ на: комментарий от aureliano15

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

Записанные на ЯП алгоритмы не есть та информация, которую требуется восстановить. Алгоритм, записанный на ЯП — своего рода «шифровка» необходимой информации, чтобы получить необходимую, нужна «дешифровка», а информации для её проведения (компиллятора и ОС, под которой он будет работать) нет. Переводя на пример с книгами, ты забываешь, что не настолько категоричный пример привёл. Более полная аналогия будет, если знания в мозгах утрачены, но и знание письменности тоже. Заново научиться говорить, расшифровать буковки в книгах и восстановить утраченные знания, конечно, можно и в таком случае, но тоже очень долго и с нуля. Да что там, вот даже вовсе не гипотетический пример — различные древние письменности (по типу древнеегипетской) до сих пор не все расшифрованы, а расшифровка тех, что расшифровать удалось, заняла огромное количество времени.

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

замечательный повод наконец забить полностью на всё legacy и сделать с нуля хорошо.

Я считаю, тут важнее процесс работы с наследованными системами. Как ни крути, legacy всё равно появится. И если единственная стратегия работы с ним заключалась в «выбросим всё, напишем заново», ничего хорошего не выйдет. Завязнем в реализации связанного списка.

i-rinat ★★★★★
()
Ответ на: комментарий от petyanamlt

Так и будет, и было уже....

Было, даже совсем недавно, средневековый упадок науки пример. А сколько раз переизобретали каменные орудия труда? Ваще ужас, там разрывы в десятки тысяч лет.

http://wakeuphuman.livejournal.com/

/0

mandala ★★★★★
()

Предлагаю гипотетическую ситуацию

вы токо что перефразировали смысл жизни, лол, но нам далеко ещё до этого, хотя вчера посмотрел Форсаж 8 и я был за ту бабу, иногда нужно показать как может стать, да.

eR ★★★★★
()

Что делать, если все бинарники вдруг исчезнут?

сделать вдоль

д. При этом исходники остались. Также само железо не пострадало. Как в такой ситуации реанимировать софт?

йопта, скомпилировать заново.

Deleted
()

Переписать весь софт с нуля получится быстрее, программисты еще обрадуются. Был бы стимул. Посмотри, за какой промежуток времени андроид наполнился софтом, перекрыв потребности в винде. Отдельное хлебное направление будет импорт данных. А компиляторы компиляторов будут спокойно ковырять археологи.

bender ★★★★★
()

Нужно будет позвонить в Спортлото.

Oxdeadbeef ★★★
()
Ответ на: комментарий от i-rinat

Бумажные книги только делают процесс обучения немного проще.

Я бы так не сказал. Когда у меня возникает проблема или надо изучить что-то новое, я беру книгу (или мануал в Сети, что одно и то же) и изучаю. Да, по каким-то вопросам могу задать вопрос или нагуглить ответ на уже заданный аналогичный вопрос, но это частности. Вот что будет, если я спрошу на этом (или на любом другом) форуме в разделе девелопмент: «хочу изучить язык rust, но книги - это ерунда, они только чуть-чуть помогают, поэтому научите меня.» Куда меня пошлют с таким вопросом? Скорее всего - в бан. Конечно, если рядом есть гуру по изучаемой теме, готовый помочь не наступить на грабли, это упрощает процесс обучения. Но всё равно главное - книги и другие письменные источники (статьи, маны и т. д.), а не гуру.

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

Записанные на ЯП алгоритмы не есть та информация, которую требуется восстановить. Алгоритм, записанный на ЯП — своего рода «шифровка» необходимой информации, чтобы получить необходимую, нужна «дешифровка», а информации для её проведения (компиллятора и ОС, под которой он будет работать) нет.

С такой точки зрения на этот вопрос не смотрел. Да, это интересно. Тогда получается, что исходник - это не просто алгоритм (знания), а часть материального изделия в составе устройства, для которого он компилируется. Тогда действительно проблема не нова: если часть устройства вышла из строя, его по-любому придётся восстанавливать руками, и с этим ничего не поделать, ни сейчас, ни раньше.

Да что там, вот даже вовсе не гипотетический пример — различные древние письменности (по типу древнеегипетской) до сих пор не все расшифрованы, а расшифровка тех, что расшифровать удалось, заняла огромное количество времени.

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

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

Ну чем выше забираешься, тем больнее падать.

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

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

Соберешь Боинг по инструкции?

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

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

йопта, скомпилировать заново.

Чем, если нет бинарников? :-)

И на возможные предложения по написанию простенького ассемблера за пять минут и т. д. сразу отсылаю к каменту Что делать, если все бинарники вдруг исчезнут? (комментарий) .

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

Программисты только выиграют, согласен, как в своё время поживились на т. н. «проблеме 2000 года». Для программистов вообще выгодно каждый новый проект начинать с нуля, игнорируя существующий код, но чтоб за это платили. Но в целом общество проиграет.

aureliano15 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.