वे बातें जो हर हैकर कभी जानता था (2017)
(catb.org)- कभी हैकर होने पर स्वाभाविक रूप से पता होने वाली ASCII bit structure, RS-232, hardware terminals और modem की जानकारी उपकरणों व network environment के बदलने के साथ अब शुरुआती सीखने की प्रक्रिया में आगे नहीं दी जाती
tty,SIGHUP,core dump,README,Ctrl-Dजैसे expressions गायब हो चुके tools के अवशेष हैं, इसलिए उनका मूल जानने से आधुनिक Unix और development conventions को बेहतर समझा जा सकता है- ASCII, 36-bit machines, octal, RS-232 settings, MIME, termios, curses और ANSI terminal control मौजूदा systems में बची historical compatibility की परतें दिखाते हैं
- mass Internet से पहले UUCP, USENET, BBS, FidoNet, FTP, Gopher, commercial timesharing और academic WAN अपने-अपने तौर पर file transfer, mail, forums और collaboration संभालते थे
- public repositories पर आधारित development DECUS tapes, FTP और email, USENET source groups,
patch(1), SCCS/RCS/CVS, SourceForge, Subversion से गुजरते हुए 2005 में Git तक पहुंचकर आकार में आया
गायब हो चुके hardware ने Unix में जो निशान छोड़े
- युवा hackers का ASCII की bit structure और अजीब control characters से अनजान होना किसी व्यक्ति की समस्या नहीं, बल्कि hardware terminals और RS-232 के रोजमर्रा से गायब हो जाने का परिणाम है
- पुराने terminals software windows नहीं थे, बल्कि central computer से जुड़े video display terminals (VDT) थे; उससे पहले कागज पर output देने वाले teletype-श्रेणी के devices इस्तेमाल होते थे
- Unix का
ttyteletype के संक्षेप से आया है,/dev/lpमेंlpline printer है, और कुछ BSD Unix में/dev/drumशुरुआती rotating drum devices से निकला है \rCarriage Return print head को line के बाएं छोर पर भेजने की क्रिया है; Unix ने line ending को सिर्फ\nसे संभाला, लेकिन अन्य operating systems\r\nका इस्तेमाल जारी रखते हैं- क्रम
\r\nइसलिए बना क्योंकि शुरुआती hardware में carriage return में एक character भेजने के समय से ज्यादा समय लगता था, इसलिए उसे पहले चलाना पड़ता था
- क्रम
- कई users द्वारा एक central computer CPU को साझा करके इस्तेमाल करने के तरीके को timesharing कहा जाता था, और आधुनिक Unix की कई virtual terminals वाली संरचना में भी उसके निशान बचे हैं
RS-232, modem और AT commands
- RS-232 एक hardware protocol है जिसे 1960 के शुरुआती वर्षों में teletypewriter और modem के communication के लिए विकसित किया गया था, और USB से पहले “serial” links का मतलब आम तौर पर RS-232 होता था
- modem वह device था जो digital signals को phone line पर भेजने योग्य बनाता था, और hackers अलग box के रूप में आने वाले external modems का बहुत इस्तेमाल करते थे
- internal modems case के अंदर RF noise के प्रति कमजोर होते थे, और external modem की indicator lights problem diagnosis में उपयोगी होती थीं
- connection success और synchronization failure को modem की beep और hiss जैसी आवाजों से कुछ हद तक पहचाना जा सकता था
- Unix के
SIGHUPमेंHUPका मतलब Hang Up है, और मूल रूप से यह उस स्थिति को दर्शाता था जब modem connection कट जाता था और controlling terminal गायब हो जाता था - modem speed 110bps से बढ़कर 1990 के दशक के अंत तक 56kbps हो गई, और लगभग 1984–1991 के स्थिर दौर में 9600bps आम था
- इसी वजह से बचे हुए serial-protocol devices अक्सर default के रूप में 9600bps इस्तेमाल करते हैं
- Hayes Smartmodem का
ATcommand prefix 1981 के बाद व्यवहार में सार्वभौमिक हो गया, औरATDTके बाद phone number जोड़कर call किया जा सकता थाATbit pattern ऐसा था जिसे receiver, transmission speed न जानने पर भी आसानी से पहचान सकता था, इसलिए automatic synchronization के लिए फायदेमंद था- 2017 में भी smartphones के 3G/4G cellular modem control functions में AT commands पाए गए, और व्यापक रूप से वितरित एक प्रकार में
AT+QLINUXCMD=को chip firmware के Linux instance तक command भेजने वाले prefix के रूप में इस्तेमाल किया गया
“core”, 36-bit machines और octal
- लगभग 1955–1975 के दौरान semiconductor memory से पहले मुख्यधारा की memory छोटे ferrite rings और copper wires से बनी core memory थी, और
in core,core dumpजैसे Unix terms यहीं से निकले - 2000 के बाद multiprocessor systems desktop पर भी आम हो गए, तो
coreprocessor core के संक्षेप के रूप में भी इस्तेमाल होने लगा, और memory वाला पुराना अर्थ धीरे-धीरे कम समझा जाने लगा - 8-bit byte और 16/32/64-bit word hierarchy का व्यावहारिक रूप से सार्वभौमिक होना 1983 के बाद की बात है; उससे पहले 36-bit word architecture की परंपरा मजबूत थी
- DEC PDP-10 और Symbolics 3600 Lisp machine प्रतिनिधि 36-bit machines थे
- PDP-10 का cancel होना 1983 में इस lineage के अंत का संकेत था, और Symbolics 3600 इसके बाद करीब 10 साल और टिके रहे
- 36-bit word 3-bit fields के 12 हिस्सों में बंटता था, इसलिए octal representation स्वाभाविक था, और माना जाता था कि memory dump में 7 से बड़े digits दिखते हैं या नहीं, इससे 32-bit lineage और 36-bit lineage में फर्क किया जा सकता है
- C के numeric literals में आगे का
0octal दर्शाता है—यह syntax B और PDP-7/PDP-11 के इतिहास से आया, और Java, Python जैसी कई languages ने C के low-level lexical rules का अनुसरण करते हुए यह निशान विरासत में लिया- Python 3, Perl 6 और Rust ने खतरनाक leading-0 octal syntax हटा दिया, लेकिन Go ने इसे बनाए रखा
- x86 instruction set की व्याख्या आम तौर पर hexadecimal में होती है, लेकिन उसके बड़े हिस्से को 3-bit fields के रूप में समझें तो octal representation ज्यादा स्वाभाविक लगती है
RS-232 settings का झंझट और 7-bit दुनिया
- TCP/IP links आम तौर पर साफ 8-bit byte stream जैसे दिखते हैं, लेकिन RS-232 devices में दोनों तरफ line speed, byte framing, parity और stop bit को मिलाना पड़ता था
- 1984 के बाद
8N1—8 bit, no parity, 1 stop bit—आम हो गया, लेकिन उससे पहले तरह-तरह के combinations इस्तेमाल होते थे और settings mismatch होने पर सिर्फ random 8-bit कचरा दिखता था, जिसे baud barf कहा जाता था - POSIX/Unix terminal interface
termios(3)में आधुनिक नजर से अस्पष्ट लगने वाले इतने जटिल options इसलिए हैं क्योंकि ऐसी RS-232 settings को manipulate करना पड़ता था - parity on होने पर 8-bit binary data का upper bit खराब हो सकता था, और जो networks व software upper bit
0x80को नुकसान नहीं पहुंचाते थे उन्हें 8-bit clean कहा जाता था- email के लिए MIME encoding और MIME64 ऐसे environment की वजह से आए जहां 7-bit constraints अब भी बचे हुए थे
- MIME से पहले 8-bit data को 7-bit में बदलने के लिए Unix environment में
uuencode/uudecodeइस्तेमाल होते थे, और आज भी कभी-कभी दिख सकते हैं
- RS-232 connectors में भी DB-25 और DB-9 का मिश्रण था, और gender changer, DB-25↔DB-9 adapter, breakout box, null modem जैसे उपकरणों की जरूरत पड़ती थी
- 2000 के बाद DB9/DB25 के standard RS-232 और circuit board के TTL serial, दोनों के लिए RS232 notation इस्तेमाल होने का जाल पैदा हुआ
- TTL serial 3.3V या 5V स्तर का होता है, जबकि standard RS-232 काफी बड़े voltage swing का उपयोग करता है; इसलिए level shifter के बिना जोड़ने पर TTL-side components खराब हो जाते हैं
- RS-232 1990 के दशक के मध्य-उत्तरार्ध में common knowledge से गायब हो गया, लेकिन 2010 के आसपास तक general-purpose computers से पूरी तरह नहीं गया था, और POS devices, commercial router diagnostic consoles, embedded debugging consoles, GPS sensors और IoT devices में बचा हुआ है
इंटरनेट से पहले के WAN और समुदाय
- आज WAN लगभग TCP/IP इंटरनेट पर converge हो चुके हैं, लेकिन 1970 के दशक के आखिर से 1990 के दशक के मध्य तक कई pre-Internet WAN साथ-साथ मौजूद थे
- UUCP, Unix to Unix Copy Program का संक्षिप्त रूप है; 1979 में Bell Labs से बाहर आने के बाद और 1990 के दशक के मध्य में आम इंटरनेट के फैलने से पहले तक, इसने modem और telephone network के जरिए Unix sites के बीच कम लागत वाली networking उपलब्ध कराई
- मूल रूप से यह software updates फैलाने के लिए store-and-forward system था, लेकिन इसका मुख्य उपयोग email और 1980 में शुरू हुए USENET के लिए होने लगा
- जिस ढांचे में telephone charges local flat-rate और long-distance usage-based billing में बंटे थे, उसमें UUCP traffic local hops जोड़कर लंबी दूरी की delivery को bypass कर सकता था
- USENET, source code sharing groups के जरिए आधुनिक open source प्रथाओं के बीजों में से एक बना, और
README,NEWS,INSTALLजैसे project metadata file names 1980 के दशक की शुरुआत में वहीं स्थापित हुए- 1987 का Great Renaming USENET group names की hierarchy का पुनर्गठन था
- 1993 में AOL ने users के लिए USENET access खोल दिया, जिससे “September that never ended” शुरू हुआ, और बड़ी संख्या में नए users के आने से cultural adaptation मुश्किल हो गया
- UUCP addresses
…!bigsite!foovax!barbox!userजैसे bang-path format में होते थे, और 1990 के दशक की शुरुआत में internet access बढ़ने के साथ उनकी जगहuser@hostnameformat ने ले ली- transition period में
%के जरिए UUCP routing और internet routing को मिलाने वाले hybrid addresses भी थे
- transition period में
- BBS आम तौर पर एक modem लगे computer पर चलने वाला system था, जिसमें एक समय में एक user connect होकर messages, file uploads/downloads और games इस्तेमाल कर सकता था
- पहला BBS 1978 में Chicago में चला, और उसके बाद 18 वर्षों में 100,000 से अधिक BBS बने और फिर गायब हो गए
- 1984 से FidoNet ने BBS के बीच email और USENET जैसे forum system को support किया
- XMODEM, YMODEM, ZMODEM BBS culture की लगभग अकेली बची हुई यादें हैं, और 2018 में भी Cisco equipment के कुछ हिस्सों को serial port के जरिए XMODEM upload से patches मिलते थे
- AOL, CompuServe, GEnie, The Source, Prodigy जैसी commercial timesharing services और CSNET, BITNET, EARN, VIDYANET जैसे academic WAN भी थे, और
listservशब्द BITNET के email reflector से निकला
FTP, Gopher और Web से पहले information access
- World Wide Web के 1990 के दशक की शुरुआत में कुछ ही वर्षों में आम हो जाने से पहले, 1971 के बाद internet sites के बीच file transfer आम तौर पर ftp और File Transfer Protocol से होता था
- जब web browsers सीधे FTP protocol बोलने में सक्षम हुए, तो ftp का उपयोग अधिकतर browsers में absorb हो गया, और
ftp:URL prefix यह बताता है कि FTP server से communicate करना है - 1991 में, जिस साल Tim Berners-Lee ने World Wide Web बनाया, University of Minnesota के hackers ने menu-centric hypertext protocol Gopher बनाया
- Gopher ने शुरुआती Web से कुछ वर्षों तक competition किया, लेकिन 1993 की शुरुआत में university ने इसके implementation पर licensing fee लगाने का फैसला किया, जिससे adoption धीमा पड़ गया
- शुरुआती web browsers Gopher protocol और document display को support करते थे, लेकिन 2000 तक Gopher व्यवहारतः गायब हो गया, और केवल कुछ servers nostalgia और irony के अर्थ में चलते रहे
terminal emulators और VDT की विरासत
- आधुनिक Unix के terminal emulators, teletype की नकल करने वाले शुरुआती displays, यानी glass TTY और dumb terminal से निकला लगभग अंतिम रूप हैं
- इस तरह का पहला device 1969 में ship हुआ था, और अच्छी तरह याद किए जाने वाले models में 1975 का ADM-3 शामिल है
- शुरुआती VDT, ASR-33 की तरह केवल uppercase दिखा सकते थे, और Unix तथा 2018 का Linux यह behavior बनाए रखते हैं कि अगर login name uppercase से शुरू हो तो वे सभी input को uppercase में बदलने वाले mode में switch हो जाते हैं
- 1975 से आए ADM-3A और 1978 के DEC VT-100 जैसे “smart terminal” ने punched cards से आया 80-character width और 24x80 या 25x80 default screen size पीछे छोड़ा
- cursor addressing, bold, underline, reverse-video जैसी control capabilities आम हो गईं, और इन्हें abstract करने के लिए Unix का terminfo database और
curses(3)library इस्तेमाल होती है - 1979 के बाद DEC VT-100 पर आधारित ANSI terminal control codes फैल गए, और 1990 के दशक की शुरुआत तक VDT में ANSI compatibility लगभग universal हो गई
- 1992 के आसपास personal computers के bitmapped color display ने monochrome VDT स्तर की dot pitch और sharp text display को catch up कर लिया, जिससे general-purpose computing में VDT market तेजी से ढह गया
- Unix command line VDT से भी पहले के printing terminal era से आई थी, और output देने के लिए “printing” शब्द इस्तेमाल करने की वजह भी यही है
vi(1),top(1),mutt(1)जैसे character-based two-dimensional interfaces VDT era के advanced visual interfaces थे, और बाद में GUI शब्द आम होने के बाद इन्हें TUI नाम मिला- screensaver की शुरुआत ऐसे software से हुई जो CRT के phosphor burn-in को रोकने के लिए screen image बदलता था, और flat screen में उसका मूल उद्देश्य खत्म हो गया
शुरुआती bitmapped display और 8-bit aesthetic
- आज के pixel-level manipulation वाले displays तक आने वाले production systems का पहला उदाहरण 1973 में Xerox PARC का Alto था
- Alto का display 608x808 pixels का था, और यह याद कि वह 1024x1024-class था, बाद के displays के साथ भ्रम है
- 1981 में Dandelion ने 1024x809 हासिल किया, और इसे Xerox Star के रूप में commercialize करने की कोशिश असफल रही
- 1982 में Sun Microsystems के Sun-1 ने 1024x800 pixels दिए, और Sun-class workstations ऐसी चीज बन गए जिन्हें कई hackers पाना चाहते थे
- personal color computers ने 1975 से primitive bitmapped display दिए, लेकिन Apple II का Hi-res mode केवल 280x192 था
- hackers को programming के लिए अच्छी text display की जरूरत थी और वे 1024x1024-class workstation graphics के बारे में जानते थे, इसलिए वे consumer TV-based color displays को अक्सर लगभग बेकार खिलौना समझते थे
- 1984 का original Macintosh 512x342 monochrome-only bitmapped display वाला पहला consumer machine था, और जल्द ही IBM EGA और clones ने 640x350 16-color उपलब्ध कराया
- लगभग 1990 में ही 1024x1024 color monitors consumer market के high-end तक पहुंचे, और लगभग 1992 में उनके common होने के साथ PC makers ने workstation vendors पर दबाव डालना शुरू किया
- 1980 के दशक के मध्य के कुछ युवा hackers ने low-resolution color displays और शुरुआती sound hardware से अधिकतम performance निकालने की कोशिश की, और उनके परिणामस्वरूप बने chunky graphics, pixelated sprites और chirpy/buzzy sounds 21वीं सदी के games में 8-bit nostalgia के रूप में इस्तेमाल होते हैं
GUI से पहले की गेम संस्कृति
- bitmapped color display के आम होने से पहले, ऐसे games की मजबूत परंपरा थी जो केवल text interface और VDT के character-cell graphics पर चलते थे
- Trek परिवार 1971 तक पीछे जाने वाला games का समूह है, जिसमें player Enterprise को नियंत्रित करके Klingon, Romulan वगैरह से लड़ता था
- teletype के लिए design किए गए बहुत ही rough interface के पीछे initiative, tactical surprise और logistics पर निर्भर एक काफ़ी sophisticated wargame छिपा था
- Colossal Cave Adventure 1977 का पहला dungeon-crawling adventure game है; “You are in a maze of twisty little passages, all alike” और
xyzzyइसी game से निकले- PDP-10 के 6-character filename की वजह से शुरुआती users इस game को ADVENT भी कहते थे
- इसका आधुनिक C port ADVENT भी उपलब्ध है
- Zork, ADVENT का सीधा उत्तराधिकारी है जिसे MIT hackers ने 1979 में PDP-10 पर पहली बार release किया था, और बाद में यह commercially successful हुआ
- zorkmid, Great Underground Empire, grue जैसे expressions यहीं से आए
- roguelike, 1980 के Rogue से नाम लेने वाली games की श्रेणी है; इसमें top-down map वाले dungeon में monsters से लड़ना और treasure ढूंढना शामिल था
- Hack 1982 में और Nethack 1987 में आया
- Nethack उन सबसे शुरुआती programs में से एक था जिनके development group को internet के जरिए distributed collaboration के रूप में जानबूझकर संगठित किया गया था, और यह नयापन project के नाम में झलकता है
- Rogue के descendant सबसे popular और successful TUI games थे; वे 1990 के दशक के मध्य के बाद आम जानकारी से गायब हो गए, लेकिन आज भी उनके dedicated fans की छोटी-सी community बनी हुई है
ASCII की bit structure और control characters
- ASCII 1960 के दशक की शुरुआत में teletype character code परिवार से विकसित हुआ, और Unicode के निचले 127 code points ASCII के रूप में design किए गए हैं, इसलिए इसके लंबे समय तक बने रहने की संभावना बड़ी है
- अगर आप UTF-8 जानते हैं, तो हर ASCII file एक valid UTF-8 file भी होती है
- keyboard का Control modifier मूल रूप से input character के ऊपर के 3 bits मिटाकर केवल नीचे के 5 bits छोड़ता है और उन्हें 0–31 range के control characters में map करता है
Ctrl-SPACE,Ctrl-@, `Ctrl-`` सभी NUL को दर्शाते हैं
- बहुत पुराने keyboards में Shift को key के अनुसार 32 या 16 bits toggle करने के तरीके से implement किया जाता था, और इसी वजह से ASCII में lowercase–uppercase संबंध और number–symbol संबंध में regularity है
- 1963 का मूल ASCII आज इस्तेमाल होने वाले 1967 ASCII से अलग था; उसमें tilde और vertical bar नहीं थे, और
5Ecaret नहीं बल्कि up-arrow था, जबकि5Funderscore नहीं बल्कि left arrow था - control characters 0–31 में से कई teletype protocol के अवशेष हैं; कुछ text या Unix conventions में और कुछ binary data protocols में बचे हुए हैं
NUL: C string terminatorEOT/Ctrl-D: Unix terminal में end of file inputBEL/Ctrl-G: teletype की bell या VDT का attention signalBS,HT,LF,FF,CR,ESC,DEL: अपेक्षाकृत well-known control characters का setDC1/DC3: XON/XOFF software flow control के रूप में इस्तेमाल किए गए और Unix, CP/M, DOS में भी implement हुएSUB/Ctrl-Z: DOS और Windows का end-of-file character, जो CP/M और DEC minicomputer OS से आया; Unix में process suspend key के रूप में इस्तेमाल होता हैESC: VT100, ANSI VDT और आधुनिक terminal emulators में control sequence introducer के रूप में अब भी इस्तेमाल होता है
DELकी value0x7Fpaper tape से आई, जहां 7 holes से किसी भी ASCII character को overwrite किया जा सकता था; tape reader DEL और NUL को skip कर देता था- Meta या Alt key VDT में आम तौर पर ASCII keycode में 128 जोड़ती थी, लेकिन आधुनिक terminal emulators अक्सर modified key से पहले
ESCडालने का तरीका भी इस्तेमाल करते हैं - ASCII bit structure को ascii(1) से देखा जा सकता है, और लेख की ASCII tables भी इसी tool से generate की गई हैं
distributed collaboration का धीमा जन्म
- आज public distributed version control और remote collaboration को हम स्वाभाविक मानते हैं, लेकिन इनके आधारभूत tools और usage conventions बनने में लंबा समय लगा
- शुरुआती पूर्वजों में से एक 1961 में स्थापित Digital Equipment Corporation Users' Group, DECUS, की tape sharing थी
- DEC users public-domain software वाली magnetic tape को circulate करते थे, और 1976 तक यह practice अच्छी तरह स्थापित हो चुकी थी
READMEconvention USENET के जरिए Unix दुनिया में आया, लेकिन यह DECUS tapes से फैले हुए traces जैसा दिखता है
- 1970 के दशक में email से source code भेजना-लेना और FTP sites पर distributions upload करना जैसे academic software collaborations मौजूद थे
- network email 1971 में invent हुआ, और 1973 तक इतना व्यापक हो गया था कि ARPANET traffic का 75% हिस्सा बन गया
- Donald Knuth का TeX, 1978 में शुरू हुए इस दौर का एक प्रमुख surviving example है
- 1980 के बाद dedicated USENET newsgroup में source code publish करना और external contributors का email से patches भेजना तेजी से convention बन गया
comp.sources.unixUnix hackers के लिए नया code खोजने की routine जगह थी
- पूरी तरह decentralized development के लिए version control, patching और forge की जरूरत थी
- SCCS 1972 में बना, लेकिन 1977 में ही Bell Labs के बाहर आया, और proprietary license ने इसके फैलाव को धीमा किया
- RCS 1982 में आया एक freely reusable alternative था
patch(1)1984 में आया; उससे पहले बदली हुई पूरी files भेजना आम तरीका था
- Nethack 1987 में शुरू हुआ एक roguelike game है, और यह पूरी तरह distributed development का शुरुआती example था जिसमें developers email से पूरी files और बाद में patches भेजते-लेते थे और local copies manage करने के लिए SCCS/RCS का इस्तेमाल करते थे
- CVS 1990 में आया, और 1993 में network remote operation capability जुड़ने के बाद FreeBSD और NetBSD जैसे प्रमुख projects ने इसे तेजी से adopt किया
- Linux को 1991 में distributed collaboration effort के रूप में announce किया गया था, लेकिन शुरुआती development Nethack की तरह email patches के जरिए होता था और public Linux repository अभी मौजूद नहीं थी
- SourceForge 1999 में आया पहला dedicated software forge था; शुरुआत में यह केवल CVS support करता था, लेकिन 2000 में आए Subversion के adoption को इसने तेज किया
- Subversion 2000–2005 के दौरान common knowledge बन गया, और 2005 में Linus Torvalds द्वारा Git बनाने के बाद पुराने version control systems तेजी से outdated हो गए
याद रखने लायक समयरेखा
- 1969 में Ken Thompson ने उस काम की शुरुआत की जो आगे चलकर Unix बना, पहला व्यावसायिक VDT शिप हुआ, और ARPANET पर पहला पैकेट एक्सचेंज हुआ
- 1970 में DEC PDP-11 शिप हुआ, जिसने आगे चलकर Intel और ARM सहित आर्किटेक्चर परिवारों पर बड़ा प्रभाव डाला
- 1971 में शुरुआती ARPANET पर नेटवर्क ईमेल और
@चिह्न के उपयोग का आविष्कार हुआ - 1973 में Xerox Alto ने हाई-रेजोल्यूशन डिस्प्ले और माउस वाले नेटवर्क्ड पर्सनल कंप्यूटर, यानी workstation, की राह दिखाई
- 1977 में Unix को Interdata पर पोर्ट किया गया, जिससे यह ऐसा पहला वर्जन बना जिसमें kernel का अधिकांश हिस्सा C में लिखा था; SCCS रिलीज़ हुआ और Colossal Cave Adventure शिप हुआ
- 1980 में Rogue का आविष्कार हुआ और USENET शुरू हुआ
- 1981 में IBM PC शिप हुआ, 4.1BSD Unix के VAX-11/780 पर TCP/IP लागू किया गया, और ARPANET व Unix संस्कृति का मेल शुरू हुआ
- 1983 में PDP-10 रद्द कर दिया गया और ARPANET तकनीकी बदलावों से गुजरकर Internet बन गया
- 1987 में USENET Great Renaming हुआ, Perl का आविष्कार हुआ, और Nethack प्रोजेक्ट शुरू हुआ
- 1991 में Linux और World Wide Web अलग-अलग शुरू हुए, और Python का आविष्कार हुआ
- 1993 में Linux को TCP/IP क्षमताएँ मिलीं, जिससे वह hobby toy से गंभीर OS की ओर बढ़ा; AOL द्वारा USENET खोलने से “September That Never Ended” शुरू हुआ, और Mosaic ने Web में ग्राफिक्स व इमेज सुविधाएँ जोड़ीं
- 1994 में अमेरिका में आम लोगों के लिए Internet ने सचमुच रफ्तार पकड़ी, और USB की घोषणा हुई
- 1995~1996 UUCP/USENET और BBS संस्कृति का शिखर था, और वही दौर था जब यह सार्वजनिक Internet के दबाव में ढह गई
- 1999 में SourceForge शुरू हुआ, और PC पर Linux चलने के साथ Sun आदि के proprietary Unix workstation बाज़ार का पतन हुआ
- 2005 में प्रमुख निर्माताओं ने CRT उत्पादन बंद कर flat-panel की ओर रुख किया; AOL ने USENET support बंद किया, और Git पहली बार शिप हुआ
- 2007~2008 में आम PC के 64-bit में संक्रमण के साथ 32-bit युग समाप्त हुआ, और iPhone व Android पहली बार Unix-आधारित OS के साथ शिप हुए
1 टिप्पणियां
Hacker News की रायें
दिलचस्प बात यह है कि यह लेख आधुनिक दुनिया से जिस तरह कनेक्ट करता है, वह काफी हद तक गलत है। उदाहरण के लिए, Hayes command prefix
ATमें लाइन स्पीड की auto-synchronization के लिए उपयोगी गुण है—यह समझाने के तुरंत बाद यह कहता है कि 2017 में भी 3G/4G cellular modem control के लिए AT commands इस्तेमाल होते हैं।लेकिन आधुनिक modems serial से connected नहीं होते, और उनमें line speed की अवधारणा भी नहीं होती। यह गुण modern hardware के लिए अप्रासंगिक है; यह समझाना कहीं ज़्यादा plausible है कि मौजूदा codebase को नए environment में बढ़ाना आसान था।
“IoT devices still speak RS-232” भी खतरनाक रूप से गलत बात है। RS-232 में 0 के लिए positive voltage और 1 के लिए negative voltage इस्तेमाल होता है, और हर एक 3~15V range में होता है; इसलिए modern IoT device के serial interface से RS-232 को सीधे जोड़ने पर device खराब होने की संभावना ज्यादा है। पुराने serial और modern devices के serial ports में जो चीजें common हैं, वे RS-232 के दायरे से बाहर की हैं; जैसे 8N1 framing को RS-232 define नहीं करता।
“हर ASCII file valid UTF-8 है” वाली बात भी अस्पष्ट है। ASCII एक character set है, disk representation define नहीं करता; और जिस ASCII file में characters को 7-bit में pack करके store किया गया हो, वह बिना manipulation के UTF-8 नहीं है। यह देखते हुए कि पहले तरह-तरह की word lengths और 8-bit-clean नहीं रहने वाले transmission formats पर बात की गई थी, यह अजीब दावा है।
यह कहना कि Git ने पहले के सभी version control systems को जल्दी ही obsolete बना दिया, Perforce को देखते हुए अतिशयोक्ति है। Git, CVS और SVN से बड़ा improvement था, लेकिन यह कहना कि उसने अपने पहले की हर चीज़ को बेकार कर दिया, software industry के बड़े हिस्से से अनजान दावा लगता है।
बेशक, यह कुछ ज्यादा ही nitpicking है, लेकिन अगर पूरे लेख का tone अकड़ू और बारीकी से खामियां निकालने वाला है, तो उसी standard से आलोचना करना अनुचित नहीं है।
यह कहना भी सही नहीं कि modern modems serial से connected नहीं होते। बस वह form ज़रूरी नहीं कि RS-232 कहलाए; कुछ साल पहले तक भी आम तौर पर USB lines इस्तेमाल होती थीं, और USB भी serial bus है।
AT commands अब भी लगभग हर modem में इस्तेमाल होते हैं, और आपकी जेब के phone में भी हैं। Cellular modem इसी तरह telephone network पर calls set up करता है, और पुराने नाम वाला
ATDTभी network call setup में लगातार इस्तेमाल होता है। AT command set call setup और maximum speed, allowed protocols जैसी call properties control करने के लिए था; auto-negotiation network/modem layer का अलग stage है। पुराने modems में वह process speaker से सुनाई देता था, अब बस सुनाई नहीं देता।ऐसे character sets दूसरे protocols पर कैसे carry होते हैं, यह इसकी definition के scope से बाहर है।
Default
115200 8n1line है, speed बदली भी जा सकती है, और speed auto-detection भी है। Modem जब separate line से ready state बताता है, उसके बाद desired speed परATभेजें तो आम तौर पर तीसरी बार तक response आ जाता है।उस अर्थ में, आज Git source code पर distributed collaboration के लिए de facto लगभग एकमात्र version control system है।
एक बूढ़े की तरफ से थोड़ा जोड़ना चाहूंगा: telephone modems में 56K सच में maximum था। Telephone network के अंदर 8-bit samples प्रति सेकंड 8 हजार बार transmit होते थे, यानी 64Kbps; लेकिन कभी-कभी low bit दूसरे signaling के लिए छीन लिया जाता था, और phone customer को यह सुनाई नहीं देता था।
Modem को उस छीने गए bit से sync कराने की कोशिश करने के बजाय reliable 7 bits ही इस्तेमाल करना आसान था, इसलिए 56Kbps बना। https://en.wikipedia.org/wiki/Robbed-bit_signaling
असल में terminal speed के रूप में इस्तेमाल होने वाला 9600bps, 9600bps modem से भी पुरानी convention है। 80s के mid-to-late दौर में 9600bps modem कमाल की चीज़ था, और terminal users के लिए काफी तेज होते हुए भी उस समय के terminals के लिए manageable speed थी। मुझे याद है Volker-Craig 4404 नाम का terminal 9600bps के साथ चल नहीं पाता था, इसलिए इसे लगभग 4800bps तक कम करके इस्तेमाल करना पड़ता था।
Minicomputer terminal multiplexers आम तौर पर जब संभव होता तो transmission को batch करते थे: DMA से memory से characters का batch लाते, भेजते, और CPU को सिर्फ “complete” interrupt देते। Character mode में भी CPU को तभी notify करते जब receive buffer भर जाता या carriage return जैसा sequence character आता।
इसलिए कई mainframes और minicomputers block mode terminals इस्तेमाल करते थे। Application form API इस्तेमाल करती थी, और editing व input terminal पर handle होते थे। Computer पूरा form terminal को भेजता; user errors correct करता, numeric/alphanumeric fields जैसी validation तक पूरी करता, फिर explicit “done” action से field contents computer को transmit करता।
पूरी तरह interactive use में भी ऐसे systems line mode पसंद करते थे, जहां current line की content सिर्फ खास actions पर transmit होती और line editing terminal पर होती। UNIX-style “raw” mode में, भले terminal की cost थोड़ी ज्यादा होती, system को जितने users संभालने होते थे उनके मुकाबले overhead बहुत ज्यादा था।
दुख की बात है कि मेरे पास 1200 baud था, और मेरे uncle कहते थे कि उनका पहला modem 300 का था।
110 setting भी याद है; शायद यह 1948 के Berlin Airlift तक पीछे जाती हो।
जब मैंने पहली बार 4G modem में AT commands इस्तेमाल करके देखा, तो सच में हंसी आ गई। वही पुराना, हाथों को याद वाला एहसास काम आ गया। बस dialing और modem की आवाज़ न होना थोड़ा खला
यह हैरानी की बात है कि 3G/4G modem industry डिवाइस से बात करने का कोई बेहतर तरीका नहीं बना पाई। ISDN तक में भी एक ठीक-ठाक API था जो व्यापक रूप से implement हुआ था
फिर भी nostalgia, अचरज और डर — तीनों बराबर मात्रा में महसूस होते हैं
https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
फिर भी AT से बात करने वाला virtual communication port बचा रहता है, और कुछ diagnostic कामों के लिए अब भी ज़रूरी हो सकता है
QMI/MBIM से data connection set up करना AT और PPP से जूझने की तुलना में कहीं ज़्यादा आसान और efficient है
“Historical USENET archive Google Groups में मिल सकते हैं” कहने के बजाय मैं archive.org की सिफारिश करूंगा। USENET groups को mbox files के रूप में सेव करने वाले कई बेहतरीन collections हैं, जिन्हें download किया जा सकता है
mboxgrepजैसा कुछ install कर लें, या mail reader में import कर लें, या बस text file की तरह पढ़ लेंउदाहरण यहां है
https://archive.org/details/usenet-comp
cd ..https://archive.org/details/usenethistorical
1980s के मध्य में, London की एक university के computer (शायद Imperial का CDC Cyber) से दूसरी university के computer (शायद Queen Mary) में login करके एक symbolic algebra package इस्तेमाल करने की कोशिश की थी, जो सिर्फ Unix minicomputer पर था
बीच के software layers की सही terminal settings और configuration values ढूंढने में पूरे 2 घंटे लग गए, और लगा कि 8-bit 2MHz 64K machine पर जितना हो सके उतना खुद code कर लेना ही बेहतर होगा
software में “ऊपर ही ऊपर जोड़ते जाने” की समस्या है। construction में मौजूदा building और components reuse किए जा सकते हैं, अंदर की कुछ चीज़ें upgrade की जा सकती हैं, या तोड़कर नया बनाया जा सकता है
लेकिन software ऐसा नहीं करता। lead pipes, CAT-3 wires, horsehair insulation, single-pane windows को नई skyscraper में जस का तस install कर देता है। क्योंकि बेहतर PVC, CAT-6, spray insulation, triple-pane windows invent करने के बजाय दशकों पुरानी technology पर बनाते जाना आसान है, या क्योंकि अब भी पुराने buildings जिस standard का इस्तेमाल करते हैं उसे obsolete नहीं बनाना चाहते और building owners upgrade का खर्च नहीं उठाना चाहते
इसलिए एक काम करने वाली skyscraper तो बन जाती है, लेकिन न जाने क्यों नए engineer को horsehair insulation सिखाना पड़ता है
इसलिए ज़्यादातर experimental research projects बनकर रह जाते हैं, और किस्मत अच्छी रही तो उनके सबसे अच्छे हिस्से समय के साथ existing projects में धीरे-धीरे शामिल हो जाते हैं
जो बात छूट रही है, वह यह है कि इन “पुरानी और खराब technologies” में से काफी अभी भी क्यों बची हुई हैं। उन्होंने समय की कसौटी झेली है। modern technology सिर्फ nostalgia की वजह से इन्हें बनाए नहीं रखती। आम तौर पर वे problems को elegant तरीके से solve करती हैं, या ज़्यादा modern systems के ऊपर useful abstraction देती हैं, या existing systems के साथ compatibility से बचा नहीं जा सकता, इसलिए अब भी useful हैं
बेशक, इन पुरानी technologies में भी खामियां हैं। कुछ दशकों बाद आपका code भी पूरा ऐसा ही होगा
standards वाला XKCD कौन-सा था?
1997 में पैदा होकर software industry में काम करते हुए मैंने एक बात सीखी है कि software engineering नाम का field कभी-कभी systems के इतिहास को समझने जैसा होता है। ऐसे लेख पढ़कर अच्छा लगता है, क्योंकि कभी-कभी कोई concept अचानक बिल्कुल फिट बैठ जाता है
embedded systems में काम करने वाले के तौर पर, इस सामग्री का काफी हिस्सा आज भी relevant है। RS-232 खुद, यानी physical layer specification, कम इस्तेमाल होती है, लेकिन उसके नीचे का UART communication protocol अब भी मजबूत बना हुआ है
उदाहरण के लिए Beaglebone development board XModem से bootloader upload करके boot किया जा सकता है
असल में ASR-33 में मूल रूप से इस्तेमाल होने वाला एक और पुराना TTY interface था, जिसे current loop कहा जाता था और जिसकी उत्पत्ति telegraph circuits से हुई थी। 1970 के दशक में RS-232 को भी support करने वाले dual-mode ASR-33 आने लगे, और आखिरकार RS-232 ने current loop को पूरी तरह replace कर दिया
KIM-1(https://en.wikipedia.org/wiki/KIM-1) इसी तरीके का उपयोग करता है, और current loop(https://en.wikipedia.org/wiki/Current_loop) interface industrial control के संदर्भ में आज भी काफी आम है। यह MIDI(https://en.wikipedia.org/wiki/MIDI#Electrical_specifications) का आधार भी है
FF (Form Feed), यानी Ctrl-L को कई video display terminals “screen clear” command के रूप में interpret करते थे, और software terminal emulators भी कभी-कभी अब भी ऐसा करते हैं
यह Usenet पर spoiler display के लिए आम तौर पर इस्तेमाल होता था। वजह यह थी कि जब तक user PgDn जैसी key से आगे नहीं बढ़ता था, message का बाकी हिस्सा दिखाई नहीं देता था। Screen पर यह
^Lके रूप में दिखता था, जिससे पता चल जाता था कि आगे और है, और जब तक^Lscreen से बाहर scroll नहीं हो जाता था, बाकी screen clear रहती थी