LINUX.ORG.RU

Нашлась единственная уцелевшая копия ОС Unix v4

 ,


0

2

В школе вычислительной техники при Университете Юты (США) нашли и восстановили магнитную ленту, на которой оказалась единственная из известных копий операционной системы Unix v4 — первой, чьё ядро, драйверы и основные утилиты были написаны на новомодном в те времена языке C.

Восстановленные данные заняли всего 40 Мбайт — они доступны для скачивания вместе с инструкцией по запуску ОС. Unix v4 работал на продвинутом по тем временам мини-компьютере DEC PDP-11, который эмулировали при помощи SimH. На момент выпуска система оставалась экспериментальным проектом.

Анонс

>>> Ссылка на исходные тексты

anonymous

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

Ну во-первых, это толксы, а не главная. А во-вторых, там было именно про обнаружение, а теперь ещё и восстановление.

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

Там только нашли, а тут аж восстановили.

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

Zhbert ★★★★★
()

Стоит заметить, что тогдашний C отличался от современного очень сильно. Вот, например, echo.c:

main(argc, argv)                                                                                                                                                                                                                                                                                                                
int argc;                                                                                                                                                                                                                                                                                                                       
char *argv[];                                                                                                                                                                                                                                                                                                                   
{                                                                                                                                                                                                                                                                                                                               
        int i;                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                
        argc--;                                                                                                                                                                                                                                                                                                                 
        for(i=1; i<=argc; i++)                                                                                                                                                                                                                                                                                                  
                printf("%s%c", argv[i], i==argc? '\n': ' ');                                                                                                                                                                                                                                                                    
}

типов функции нет (подразумевается int, в одном из последних стандартов вроде это уже выпилили), переменные определяются до тела, хотя они переданы в качестве параметров (наверное так все еще можно?), include нет, ну и return для слабаков, конечно.

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

Си и так дает тебе возможность выстрелить себе не только в ногу, причем любым удобным тебе способом :)

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

ну и return для слабаков, конечно.

Все пRиличные языки пRогRамиRования просто возвращают последнее вычисленное значение.

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

Вы, батенька, видать первое издание Кернигана и Ричи не читали :)

gns ★★★★★
()

Погодите-ка, а что тогда лежит на https://www.tuhs.org ?

Может, конечно там не все, от четвертой версии там какая-то копия ленты от Томсона лежит, в Юте что-то еще нашли?

gns ★★★★★
()

Я в одной социальной сети подписан на группу любителей PDP-11, там уже во всю и на железе, и на эмуляторах запускают.

Shadow ★★★★★
()

всего 40 Мбайт

Хренассе «всего»!..
«286, 1/40, косые, ВЖА» - и это уже начало 90-х, а не какие-то там 70-е.

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

Ну ты вспомнил! :) Я как-то попробовал написать по Кернигановски, так современный компилятор меня нахрен послал. У GCC сейчас самый старый поддерживаемый стандарт — это С89, а это уже с прототипами и с объявлением формальных параметров с типами и в скобках.

Я такое только в Venix (который System III) видел. И да, там только так писать и можно.

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

Такой синтаксис даже во втором издании K&R упоминается, а что тип функции не указан, то по умолчанию предполагается, что она возвращает int (но не void, как можно было бы ожидать).

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

Не, нуачо? На большую бобину полдюймовой ленты как раз 50 мегов и влезало.

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

Мне больше всего интересно, где они живой ленточный привод нашли? И как и к чему они его подключили?

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

Может, где-то на складах до сих пор пылятся старые компы в коробках, и комплектуха к ним, видимо. А может, из музея изъяли :)

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

Так в США пожилых фанатов техники своей юности полно. Я и сам хотел бы ДВК-2М с фрязинским терминалом собрать, да с перфоратором, да с 8" дисками...

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

У меня только честные эмуляторы PDP-11 только под масадос где-то остались. Не знаешь, под линухом народ чем пользуется?

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

Ну, PDPшки-то еще и в деле кое-где встречаются, это не проблема. Да и контроллер лентовода для QBUS найти можно и в MicroPDP его воткнуть. Сам магнитофон может быть проблемой. Хотя, суда по картинке под новостью, его они где-то нашли.

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

Смотря чем компилять будешь. Только что проверил, GCC начинается с С89. Я как-то попробовал так написать, был послан.

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

в штатах, видимо, практика сдачи целых машзалов на драгметаллы была менее распространена, чем у нас в 90-е.

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

Не совсем интересно. У меня остались старые посекторные образы RKшников, масадосовские эмуляторы умели их читать. Не думаю, что QEMU это умеет.

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

Да, там музеи строили. Или продолжают использовать ту же технику на тех же задачах до ее полного физического износа.

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

да, собственно, ни чего особенного. все в стандарте. может я не те книги читал?! :о)

main$ gcc main.c
main.c:1:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 main(argc, argv)
 ^
main.c: In function ‘main’:
main.c:9:17: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
                 printf("%s%c", argv[i], i==argc? '\n': ' ');
                 ^
main.c:9:17: warning: incompatible implicit declaration of built-in function ‘printf’
main.c:9:17: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’

main$ ./a.out AAA
AAA

p.s. да, вижу, ниже уже вспомнили

Кернигана и Ричи

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

Действительно, съедобно... Вот уж не помню, с чем тогда таким кернигановским меня послали?...

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

переменные определяются до тела

А в растишке не так? Я конечно не спец по ржавому, но весь код который я видел с циклами сначала переменные определяет, а потом цикл начинается. ИМХО это правильный подход в целом — заставляет аккуратнее писать, не даёт лагучие костыли подставлять прямо среди цикла.

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

Так я про современный. Проверил, в С23 удалили объявления функций в стиле K&R. Смотри:

$ gcc --std=c89 echo.c
echo.c: In function ‘main’:
echo.c:9:17: warning: incompatible implicit declaration of built-in function ‘printf’ [-Wbuiltin-declaration-mismatch]
    9 |                 printf("%s%c", argv[i], i==argc? '\n': ' ');
      |                 ^~~~~~
echo.c:1:1: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
  +++ |+#include <stdio.h>
    1 | main(argc, argv)

Компилируется только с warning’ом, но работает.

$ gcc --std=c23 echo.c
echo.c:1:1: error: return type defaults to ‘int’ [-Wimplicit-int]
    1 | main(argc, argv)
      | ^~~~
echo.c: In function ‘main’:
echo.c:1:1: warning: old-style function definition [-Wold-style-definition]
echo.c:9:17: error: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
    9 |                 printf("%s%c", argv[i], i==argc? '\n': ' ');
      |                 ^~~~~~
echo.c:1:1: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
  +++ |+#include <stdio.h>
    1 | main(argc, argv)
echo.c:9:17: warning: incompatible implicit declaration of built-in function ‘printf’ [-Wbuiltin-declaration-mismatch]
    9 |                 printf("%s%c", argv[i], i==argc? '\n': ' ');
      |                 ^~~~~~
echo.c:9:17: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’

error’ы на тип функции и printf.

А про return, его отсутствие уже в C99 это undefined behaviour в случае, если его читают:

If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.

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

Все пRиличные языки пRогRамиRования просто возвращают последнее вычисленное значение.

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

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

ну, надеюсь, мы поняли др.др?! :о)

Безусловно, просто обратил внимание на то, что несмотря на то, что это Си, это все-таки сильно другой Си, и многие, особенно те, кто изучал его где-то года с 2010-го, уже могут не узнать. Лично мне C99 самым адекватным кажется :)

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

Достаю из кладовки двухкассетный магнитофон для теста. Буду сервер деплоить.

antonio-an
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.