1 पॉइंट द्वारा GN⁺ 2023-10-01 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • कभी हैकर होने पर स्वाभाविक रूप से पता होने वाली 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 का tty teletype के संक्षेप से आया है, /dev/lp में lp line printer है, और कुछ BSD Unix में /dev/drum शुरुआती rotating drum devices से निकला है
  • \r Carriage 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 का AT command prefix 1981 के बाद व्यवहार में सार्वभौमिक हो गया, और ATDT के बाद phone number जोड़कर call किया जा सकता था
    • AT bit 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 पर भी आम हो गए, तो core processor 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 में आगे का 0 octal दर्शाता है—यह 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@hostname format ने ले ली
    • transition period में % के जरिए UUCP routing और internet routing को मिलाने वाले hybrid addresses भी थे
  • 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 नहीं थे, और 5E caret नहीं बल्कि up-arrow था, जबकि 5F underscore नहीं बल्कि left arrow था
  • control characters 0–31 में से कई teletype protocol के अवशेष हैं; कुछ text या Unix conventions में और कुछ binary data protocols में बचे हुए हैं
    • NUL: C string terminator
    • EOT / Ctrl-D: Unix terminal में end of file input
    • BEL / Ctrl-G: teletype की bell या VDT का attention signal
    • BS, HT, LF, FF, CR, ESC, DEL: अपेक्षाकृत well-known control characters का set
    • DC1/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 की value 0x7F paper 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 अच्छी तरह स्थापित हो चुकी थी
    • README convention 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.unix Unix 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 टिप्पणियां

 
GN⁺ 2023-10-01
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 से आलोचना करना अनुचित नहीं है।

    • “IoT devices अब भी RS-232 इस्तेमाल करते हैं” वाली बात असल में काफी हद तक सही है। लगता है आप low-voltage modern devices के बारे में सोच रहे हैं, लेकिन industrial settings में Modbus और RS-485/RS-232 अब भी जिंदा हैं, और IoT भी सक्रिय है।
      यह कहना भी सही नहीं कि 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 से सुनाई देता था, अब बस सुनाई नहीं देता।
    • बारीकी से कहें तो UTF-8 भी disk representation define नहीं करता; यह सिर्फ Unicode character set का character encoding है। हालांकि bit representation define करने के लिहाज से “ASCII, UTF-8 के रूप में भी valid है” वाला वाक्य सही है।
      ऐसे character sets दूसरे protocols पर कैसे carry होते हैं, यह इसकी definition के scope से बाहर है।
    • “Modern modems serial से connected नहीं होते और line speed की concept नहीं होती” — यह किसने तय किया, पता नहीं। मैं अभी भी दूसरे screen पर LTE Cat M1 modem से serial link के जरिए जुड़े microcontroller को debug कर रहा हूं।
      Default 115200 8n1 line है, speed बदली भी जा सकती है, और speed auto-detection भी है। Modem जब separate line से ready state बताता है, उसके बाद desired speed पर AT भेजें तो आम तौर पर तीसरी बार तक response आ जाता है।
    • यह लेख common-sense level की explanation को लक्ष्य करके लिखा गया है। यह पूरी software industry को cover नहीं कर रहा, बल्कि साफ कहता है कि सिर्फ वे हिस्से cover करता है जो किसी hacker को पता हो सकते हैं।
      उस अर्थ में, आज Git source code पर distributed collaboration के लिए de facto लगभग एकमात्र version control system है।
    • यह सच में बहुत ज्यादा nitpicky response लगता है। Context में इसे 8-bit bytes में stored ASCII मानकर पढ़ना चाहिए।
  • एक बूढ़े की तरफ से थोड़ा जोड़ना चाहूंगा: 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 तक कम करके इस्तेमाल करना पड़ता था।

    • Terminals में 9600bps standard speed इसलिए बनी क्योंकि 10-bit framing (start/byte/stop) के साथ 80×24 की पूरी screen 2 seconds के अंदर भेजी जा सकती थी, और कई users को handle करते समय fractional-MIPS class hosts पर interrupt या DMA का बोझ भी जरूरत से ज्यादा नहीं पड़ता था।
      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 बहुत ज्यादा था।
    • 56k modem होने पर भी broadband के व्यापक रूप से उपलब्ध होने से पहले कई लोग 28.8 connection में ही अटके थे। Rural phone lines 56k को reliably handle कर पाती थीं, ऐसा बहुत कम होता था।
    • 4800bps? पहले तो 2400 मिल जाए तो भी हम खुश हो जाते थे।
      दुख की बात है कि मेरे पास 1200 baud था, और मेरे uncle कहते थे कि उनका पहला modem 300 का था।
      110 setting भी याद है; शायद यह 1948 के Berlin Airlift तक पीछे जाती हो।
  • जब मैंने पहली बार 4G modem में AT commands इस्तेमाल करके देखा, तो सच में हंसी आ गई। वही पुराना, हाथों को याद वाला एहसास काम आ गया। बस dialing और modem की आवाज़ न होना थोड़ा खला
    यह हैरानी की बात है कि 3G/4G modem industry डिवाइस से बात करने का कोई बेहतर तरीका नहीं बना पाई। ISDN तक में भी एक ठीक-ठाक API था जो व्यापक रूप से implement हुआ था

    • 3G/4G होना भी ज़रूरी नहीं। ESP8266 पर Wi-Fi handle करते समय शायद आप AT commands ही इस्तेमाल कर रहे होंगे। बेशक, यह Hayes command set से लगभग अलग ही चीज़ है
      फिर भी nostalgia, अचरज और डर — तीनों बराबर मात्रा में महसूस होते हैं
      https://docs.espressif.com/projects/esp-at/en/latest/esp32/A...
    • satellite communications के साथ प्रयोग करते समय Iridium से connect करते हुए AT command set से handshake करना पड़ा, तो मैं चौंक गया
    • आजकल ज़्यादातर 3G/4G modems USB से connect होते हैं, और Quectel chipsets पर QMI, और/या MBIM support करते हैं, इसलिए software से उन्हें use करना AT की तुलना में आसान है
      फिर भी AT से बात करने वाला virtual communication port बचा रहता है, और कुछ diagnostic कामों के लिए अब भी ज़रूरी हो सकता है
      QMI/MBIM से data connection set up करना AT और PPP से जूझने की तुलना में कहीं ज़्यादा आसान और efficient है
    • समझ नहीं आया हंसूं या रोऊं, जब cellular modem से HTTPS के जरिए binary file download करवाने के लिए AT command भेजनी पड़ी। परिचित command set का इस्तेमाल जारी रखना चाहते हैं, यह समझ आता है, लेकिन इसे इतना फैला दिया गया है कि मूल रूप पहचान में नहीं आता
    • बेहतर protocol कैसा दिखना चाहिए? कई क्षेत्रों में backward compatibility काफी बड़ा फायदा है
  • “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

  • 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 कर लेना ही बेहतर होगा

    • सही है। उस दौर में UK में computer science degree कर रहे लोगों ने ZX Spectrum/BBC Micro पर Elite, Jet Set Willy, Manic Miner को hack करते हुए Z80 या 6502 machine code practical तौर पर सीखा हो, इसकी काफी संभावना थी
  • 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 सिखाना पड़ता है

    • लोग हमेशा बिल्कुल नई और बेहतर software technology बनाने की कोशिश करते हैं। लेकिन ऐसा करने पर मौजूदा चीज़ों के साथ backward compatibility टूट जाती है, जिससे adoption बहुत मुश्किल हो जाता है
      इसलिए ज़्यादातर experimental research projects बनकर रह जाते हैं, और किस्मत अच्छी रही तो उनके सबसे अच्छे हिस्से समय के साथ existing projects में धीरे-धीरे शामिल हो जाते हैं
    • यह दिलचस्प है कि कई प्रतिक्रियाएं ऐसी लगती हैं जैसे पिछले 60+ सालों के computer evolution में सीखने लायक कुछ नहीं है
      जो बात छूट रही है, वह यह है कि इन “पुरानी और खराब 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 किया जा सकता है

    • कई छोटे microcontrollers भी अब भी UART port और serial protocol के जरिए device को reflash करते हैं। यह hardware interface का least common denominator है और काम करने वाला सबसे सरल तरीका है
  • असल में 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) का आधार भी है

    • current loop वहाँ इस्तेमाल होता है जहाँ cable की लंबाई बहुत ज्यादा हो सकती है। एक सिरे पर 20mA डालें तो लंबाई चाहे जो भी हो, दूसरे सिरे पर वह मिल जाएगा—यह बात आप जान सकते हैं; voltage-based तरीके में ऐसा नहीं होता
    • current loop 80 के दशक तक भी आम तौर पर इस्तेमाल होता था, और जहाँ भी लंबे cable runs की जरूरत होती थी वहाँ उपयोग किया जाता था। याद पड़ता है कि VAX 780 19200 support करता था, लेकिन सिर्फ 20mA loop पर
  • FF (Form Feed), यानी Ctrl-L को कई video display terminals “screen clear” command के रूप में interpret करते थे, और software terminal emulators भी कभी-कभी अब भी ऐसा करते हैं
    यह Usenet पर spoiler display के लिए आम तौर पर इस्तेमाल होता था। वजह यह थी कि जब तक user PgDn जैसी key से आगे नहीं बढ़ता था, message का बाकी हिस्सा दिखाई नहीं देता था। Screen पर यह ^L के रूप में दिखता था, जिससे पता चल जाता था कि आगे और है, और जब तक ^L screen से बाहर scroll नहीं हो जाता था, बाकी screen clear रहती थी