1 पॉइंट द्वारा GN⁺ 2025-10-05 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • COBOL में लिखा गया एक मिनिमल static web server, जो दिखाता है कि GnuCOBOL का उपयोग करके modern system programming संभव है
  • वर्तमान directory की static files serve करना, MIME type auto-detection, HTTP status code handling (200/403/404/413), path traversal attack को block करना, request log output जैसी सुविधाएँ प्रदान करता है
  • single-threaded है, इसलिए एक समय में केवल एक request ही process कर सकता है, और अधिकतम 64KB file size को support करता है
  • GnuCOBOL इंस्टॉल किए गए POSIX-compatible environment (Linux/macOS/BSD) में चलता है, make से compile करने के बाद ./webserver कमांड से port 8080 पर चलाया जा सकता है
  • COBOL भाषा में लिखे गए network program के एक उदाहरण के रूप में, यह साबित करने वाला प्रोजेक्ट है कि legacy language से भी modern web server बनाया जा सकता है

प्रोजेक्ट अवलोकन

  • Webbol, COBOL भाषा और GnuCOBOL compiler का उपयोग करके विकसित किया गया एक मिनिमल static web server है
  • इसका उद्देश्य सरल static file serving और COBOL की आधुनिक उपयोगिता को साबित करना है

मुख्य फीचर्स

  • वर्तमान directory की static file serving
  • आम file formats के लिए automatic MIME type detection
  • HTTP status code 200(OK), 403(Forbidden), 404(Not Found), 413(Payload Too Large) support
  • path traversal attack (../ आदि) की रोकथाम
  • पूरे HTTP header सहित साफ request log recording
  • root path request पर index.html को default रूप से serve करना

सिस्टम आवश्यकताएँ

  • GnuCOBOL (cobc) compiler आवश्यक
  • POSIX-compatible operating system आवश्यक (Linux, macOS, BSD)
  • make tool आवश्यक

काम करने का उदाहरण और access method

  • index.html file होने पर http://localhost:8080/ पर जाने से वही file serve होती है
  • http://localhost:8080/filename.html जैसे पते की जगह, किसी individual file या subdirectory file को उसके path से serve किया जा सकता है
  • server को Ctrl+C से बंद किया जाता है

संरचना और file composition

  • Makefile: build configuration
  • README.md: विवरण guide file
  • config.cpy, socket-defs.cpy, http-structs.cpy, file-structs.cpy: server, socket, HTTP, file handling structure definitions
  • path-utils.cbl: path validation और cleanup
  • mime-types.cbl: MIME type determination logic
  • file-ops.cbl: file reading operations
  • http-handler.cbl: HTTP request/response handling
  • webserver.cbl: main server program

समर्थित MIME types

  • HTML: text/html
  • CSS: text/css
  • JavaScript: application/javascript
  • JSON, XML, Plain text, PNG, JPEG, GIF, SVG, ICO, PDF आदि
  • अतिरिक्त MIME type registration, mime-types.cbl file में संभव है

सुरक्षा फीचर्स

  • path traversal prevention: .. sequence शामिल वाले request को block करना
  • directory access restriction: केवल वर्तमान directory और उसकी subdirectories की files ही serve की जाती हैं
  • safe file handling: file system access से पहले path validation और validity check

सीमाएँ

  • single-threaded आधारित: एक समय में केवल एक request process हो सकता है
  • SSL/TLS(HTTPS) support नहीं
  • अधिकतम file size: 64KB
  • केवल line-sequential file organization (text files) support
  • cache, compression, range request आदि support नहीं

2 टिप्पणियां

 
yangeok 2025-10-05

कॉमेंट्स भी काफ़ी दिलचस्प दिख रहे हैं,,

 
GN⁺ 2025-10-05
Hacker News टिप्पणियाँ
  • COBOL का fixed format mode वास्तव में इस्तेमाल होते देखना अच्छा लगा
    COBOL में दो mode होते हैं: free mode और fixed format mode
    fixed format, punch card युग की विरासत के अनुसार, खास columns के आधार पर विभाजित होता है

    • कॉलम 1~6: लाइन नंबर

    • कॉलम 7: indicator character (जैसे * comment के लिए, उदाहरण कोड में देखा जा सकता है)

    • कॉलम 8~11: विशेष division marker, कभी-कभी इससे भी ज़्यादा जगह घेरता है(उदाहरण फ़ाइल)

    • कॉलम 12~72: वास्तविक COBOL statements

    • कॉलम 73~80: programmer comments आदि के लिए स्वतंत्र उपयोग
      यह संरचना आज के developers और tools पर बोझ डालती है, इसलिए free format mode की सिफारिश की जाती है
      लेकिन fixed format mode का अपना अलग आकर्षण भी है, इसलिए अगर 2025 में COBOL इस्तेमाल करने वाले हो तो असली पुरानी vibe का मज़ा लेने की सलाह दूँगा

    • कॉलम 73~80 का उपयोग इसीलिए भी होता था कि अगर cards बिखर जाएँ तो sorting machine से उन्हें फिर क्रम में लगाया जा सके
      COBOL cards का अहसास लेना हो तो इस लिंक पर COBOL card चुनकर देख सकते हो
      और भी पुराना अनुभव चाहिए तो पहले coding form पर program लिखो, फिर assistant उसे keypunch करे—ऐसा भी कर सकते हो(sample)

    • पुराने Fortran में भी fixed column structure था, बस column layout अलग था
      समानता यह थी कि कॉलम 73~80 को card sorting के sequence numbers आदि के लिए खाली छोड़ा जाता था
      मैंने खुद असली cards कभी इस्तेमाल नहीं किए, लेकिन cards गिर जाना या उनका क्रम बिगड़ जाना आसान रहा होगा, इसलिए sequence numbers और sorter बहुत उपयोगी रहे होंगे

    • यह हिस्सा मुझे भी प्रभावशाली लगा
      लेकिन Makefile में cobc का -free option इस्तेमाल हो रहा था, यह मज़ेदार लगा

  • लोग कहते हैं, “काम के लिए सबसे अच्छा tool इस्तेमाल करो,” लेकिन COmmon Business Oriented probLems के लिए भी वे COBOL नहीं चुनते

    • यही बात MUMPS पर भी लागू होती है
      लोग यह नज़रअंदाज़ कर देते हैं कि वे वाकई शानदार चुनाव कर सकते हैं

    • बात सिर्फ COBOL न चुनने की नहीं है, बल्कि उसे consider भी नहीं किया जाता

    • मुझे जिज्ञासा है कि लोग “काम के लिए सबसे अच्छा tool” वाली बात कब और क्यों कहते हैं

  • हमारी कंपनी 40~50 साल से भी पुरानी है
    आज भी हमारे business operations का 90% COBOL पर आधारित है
    business users अभी भी RM/COBOL और RM/PANELS से बने blue screen पर काम करते हैं
    2010s तक हम COBOL से HTML generate करते थे, लेकिन सीधे HTTP requests नहीं लेते थे
    उसकी जगह Apache के पीछे एक RPC layer रखी जाती थी, जो HTTP request को CGI में बदलकर COBOL तक पहुँचाती थी
    COBOL program HTML strings को CGIRPC interface पर भेजता था, और उसका result browser में web page के रूप में दिखता था
    आज भी हम XML services आदि के साथ इसका इस्तेमाल करके legacy web apps को support कर रहे हैं
    ईमानदारी से कहूँ तो यह project उससे कहीं ज़्यादा cool अनुभव है

  • यह देखना दिलचस्प है कि code की लगभग हर line पर comment है
    इससे “code को खुद documentation होना चाहिए” वाली बात की धारणाओं पर फिर सोचने का मन होता है
    इसमें यह मान लिया जाता है कि code पढ़ने वाला व्यक्ति language जानता है, और कुछ मामलों में “self-documenting” होना संभव होना चाहिए
    शायद COBOL से परिचित लोग कहेंगे कि COBOL भी काफ़ी self-documenting हो सकता है, लेकिन मुझे पक्का नहीं पता

    • git commit d9a5e3e में यह लिखा मिला: “जिज्ञासु लोगों को हर line क्या करती है, यह समझने में मदद मिले इसलिए comments जोड़े”

    • “code भाषा जानने वाला ही पढ़ता है” — मुझे लगता है यह context पर निर्भर करता है
      जब आप अकेले या किसी और के लिए सीखते हुए code लिख रहे हों, तब हर line क्या कर रही है उस पर comment लिखना स्वाभाविक लगता है
      दूसरी ओर, professional environment में यह मानकर कि team भाषा अच्छी तरह जानती है, बिना comments के संरचनात्मक रूप से manage करना अक्सर बेहतर विकल्प हो सकता है

    • बैंक में कुछ लोग COBOL code को लगभग natural language जैसा कहकर self-documenting बताते थे, और यह सुनकर मैं हँसी रोकते-रोकते रह गया

  • यह शायद मज़ाक हो, लेकिन सच में मेरे मन में सवाल उठा इसलिए पूछ रहा हूँ
    क्या COBOL में security-related guarantees के बारे में अच्छी जानकारी रखने वाला कोई है?
    उदाहरण के लिए, क्या COBOL memory bounds के बाहर access की अनुमति देता है, और C या Rust की तरह “गलती से” security hole बनने का जोखिम कैसा है?

    • COBOL में memory bounds के बाहर access पर modern compilers आम तौर पर error दे देंगे, और अगर compile या run हो भी जाए तो runtime error या तुरंत crash जैसी स्थिति आएगी
      हालाँकि, COBOL के reference modification feature के जरिए जानबूझकर data boundary के बाहर memory refer करना संभव है
      यह पूरी तरह safe नहीं है, लेकिन compile चरण में बहुत-सी गलतियाँ और misuse पकड़ लिए जाते हैं, इसलिए accidental mistakes की दर काफ़ी कम हो जाती है

    • http handler को देखते हुए मेरे मन में भी यही सवाल आया था
      अगर method और path के बीच space न हो तो buffer overrun संभव लग रहा था
      मैंने खुद इसे चलाकर नहीं देखा, लेकिन इस तरह की चिंता हुई

  • CALL "socket" क्या करता है, इसके बारे में और जानने की इच्छा है
    CALL तो subprogram call है, लेकिन "socket" कहाँ define है यह समझ नहीं आया
    मैंने पहले भी COBOL web server बनाने के बारे में सोचा था, लेकिन GnuCOBOL FAQ में सिर्फ CGI के ज़रिए संभव बताया गया था, इसलिए आगे नहीं बढ़ पाया(FAQ देखें)
    इस project को और गहराई से देखना चाहता हूँ
    यह सच में बहुत रोचक लगता है

    • "socket" शायद system call invocation हो सकता है
  • एक समय था जब कुछ सरकारी संस्थानों और कंपनियों की websites के backend में COBOL इस्तेमाल होता था
    उस दौर की sites को उनके HTML के 100-column fixed-width format output से आसानी से पहचाना जा सकता था

  • मुझे लगता था कि मैं किसी भी language में programming कर सकता हूँ, लेकिन इस COBOL project को देखकर Assembly भी इसके मुकाबले साफ़ और elegant लगने लगी
    Jms Dnns! यह project सच में सोच का दायरा बढ़ा देने वाला शानदार काम है

    • अपनी पहली नौकरी में मैं manufacturing systems के लिए COBOL और financial systems के लिए Assembler support करता था
      दोनों भाषाओं के कई दर्जन सेंटीमीटर ऊँचे source code stacks संभालने के अनुभव से कहूँ तो COBOL वाला हिस्सा दिमाग में व्यवस्थित रखना कहीं आसान था
      हालाँकि यह व्यक्ति पर निर्भर कर सकता है
  • यह वाकई शानदार project है
    अगर COBOL शुरू करने के बारे में कोई tips हों तो सुनना चाहूँगा

  • अब हम COBOL on Cogs की vision के एक कदम और करीब आ गए हैं
    coboloncogs.org पर और देखा जा सकता है