[HN Gopher] Webbol: A minimal static web server written in COBOL
       ___________________________________________________________________
        
       Webbol: A minimal static web server written in COBOL
        
       Author : simonpure
       Score  : 106 points
       Date   : 2025-10-03 14:13 UTC (8 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | pantulis wrote:
       | Now we are one step closer to fully realize the vision of Cobol
       | on Cogs
       | 
       | http://www.coboloncogs.org/INDEX.HTM
        
       | nonethewiser wrote:
       | It's interesting to see just about every line in the code
       | commented. Makes you re-examine the assumptions made when people
       | say "the code should be self documenting."
       | 
       | Namely, that the code will be read by someone who knows the
       | language. And arguably that the code should be capable of being
       | "self-documenting." Although perhaps people well-versed in COBOL
       | would argue COBOL can be, and I just don't know it.
        
         | wrs wrote:
         | See commit d9a5e3e, "Added comments to the code to help curious
         | folks understand what each line is doing".
        
           | jmsdnns wrote:
           | yep. the comments are for folks who have never tried to read
           | cobol before, which is probably 99% of people looking at the
           | project. this way they can understand a familiar idea
           | expressed in a language that is probably wildly different
           | from what theyre used to.
           | 
           | for example IT IS YELLING AT US THE WHOLE TIME
        
         | samus wrote:
         | I heard people at a bank claim that COBOL code is basically
         | natural language and thus self-documenting. I almost laughed
         | out at that.
        
           | RaftPeople wrote:
           | Bank teller: "And how can I help you?"
           | 
           | Customer: "PERFORM 500-DEDUCT-ACCOUNT-BALANCE"
           | 
           | Bank teller: "Ok, great, and how much?"
           | 
           | Customer:
           | 
           | "01 TRANSACTION RECORD                 05 TRANSACTION-AMOUNT
           | PIC 9(9)V99
           | 
           | MOVE 100.00 TO TRANSACTION-AMOUNT"
        
         | CaptainOfCoit wrote:
         | "Namely, that the code will be read by someone who knows the
         | language. " Most of the time I think it depends on the context.
         | If you're writing code as a learning exercise, either for
         | yourself or for others, it makes sense to use comments to
         | expand on what lines actually do.
         | 
         | If you're in the context of a professional environment, where
         | you chose the team, it makes sense to be more dogmatic about it
         | to enforce a better overall architecture, and you can safely
         | assume that the next reader at least knows the language
         | already.
        
       | jrmg wrote:
       | I know this is a 'joke', but it sparked in me actual questions
       | that I am sure some folks here will know the answers to:
       | 
       | What are the security guarantees with writing in COBOL? Like,
       | does COBOL allow out-of-bounds memory access? How does it compare
       | to C or Rust as far as allowing 'accidental' security lapses?
        
         | leakycap wrote:
         | > Like, does COBOL allow out-of-bounds memory access?
         | 
         | Modern COBOL compilers will catch this with an error; if you do
         | manage to compile and run, you'll get a runtime error or
         | immediate crash.
         | 
         | > How does it compare to C or Rust as far as allowing
         | 'accidental' security lapses?
         | 
         | COBOL has reference modification that can easily be
         | purposefully used to reference memory outside the bound of the
         | original data you target. It isn't memory safe, it's just very
         | restrictive so many errors/misuses get weeded out during
         | compiling.
        
         | evnu wrote:
         | I wondered about that as well while looking into the http
         | handler. I think a missing space between method and path
         | overruns the buffer (haven't tried running it though).
        
       | pelagicAustral wrote:
       | See also:
       | 
       | Cobol on Cogs: http://www.coboloncogs.org/HOME.HTM
       | 
       | Cobol on Wheelchair: https://github.com/azac/cobol-on-wheelchair
        
       | tuveson wrote:
       | People say "pick the best tool for the job" and then refuse to
       | pick COBOL for their COmmon Business Oriented probLems
        
         | dardeaup wrote:
         | They don't refuse to pick COBOL, they refuse to consider COBOL.
        
           | pmontra wrote:
           | They even forget that COBOL could run on their computers and
           | servers.
        
         | graemep wrote:
         | Why and when is the the "best tool for the job"?
        
           | lazerman wrote:
           | Whoosh
        
           | ternaryoperator wrote:
           | It's an ideal language for creating business reports, which
           | is what it was originally designed to do. It has built-in
           | commands for reading randomly or sequentially from a database
           | and it has extensive report-formatting options. It has other
           | application capabilities, of course, but business reporting
           | (especially complex reports) are its sweet spot.
        
         | jsight wrote:
         | That is true for MUMPS too. People overlook what an epic
         | decision they could be making.
        
       | john-tells-all wrote:
       | I thought I could program in any language. But: that Cobol
       | project makes Assembly language look clean and elegant.
       | 
       | I applaud Jms Dnns! This project really makes you think.
        
         | jmsdnns wrote:
         | thank you!
        
       | neoeno wrote:
       | Love to see fixed format mode in use :)
       | 
       | For those who are unaware -- you can use COBOL in two modes: free
       | mode and fixed format mode.
       | 
       | Fixed format mode is (afaik) the original, based on punch card
       | affordances, and specifies specific columns for specific
       | purposes:
       | 
       | * The first 6 columns for line numbers
       | 
       | * Column 7 for the indicator character (notably: * for comments
       | as you can see here
       | https://github.com/jmsdnns/webbol/blob/main/file-structs.cpy )
       | 
       | * Column 8-11 for special division markers, though they can
       | extend beyond (visible in this file:
       | https://github.com/jmsdnns/webbol/blob/main/webserver.cbl)
       | 
       | * Columns 12-72 for ordinary COBOL statements
       | 
       | * Columns 73-80 for programmer comments or whatever notes you
       | like
       | 
       | All the columns are undoubtedly a bit taxing to the modern
       | developer and their tools, so 'free mode' which discards all the
       | above is the suggested default.
       | 
       | But, I think fixed mode is very charming, and if you're going to
       | write COBOL in 2025, you may as well try to get the most
       | authentic experience!
        
         | rdimartino wrote:
         | I liked this too, but interesting that the Makefile uses the
         | `-free` flag for cobc
        
           | bombcar wrote:
           | I assume fixed is a subset of free? So perhaps a few lines
           | somewhere aren't perfect.
        
             | jmsdnns wrote:
             | the code is similar to fixed format, but the location of
             | the comments gives away that it is actually in free format.
             | 
             | * comments use *> at start of line, though I'm not sure
             | i'll keep that
             | 
             | * indentation is flexible, but i prefer how fixed looks
             | 
             | * no column restrictions
        
         | wrs wrote:
         | Cols 73-80 were sometimes used for sequence numbers so when you
         | spilled your cards on the floor you could run them through the
         | sorting machine.
         | 
         | This may help you get the feel (pick the COBOL card at the
         | top). [0]
         | 
         | For an even more authentic experience, write the program on a
         | coding form first, then give it to an assistant for
         | keypunching. [1]
         | 
         | [0] https://www.masswerk.at/keypunch/
         | 
         | [1] https://www.mainframestechhelp.com/tutorials/cobol/coding-
         | sh...
        
         | gmueckl wrote:
         | Early versions of Fortran also had a fixed column layout,
         | although the columns were different. The only commonality thst
         | I can find right now is ignoring columns 73 to 80 to make space
         | for card sequence numbers.
         | 
         | I never wrote a program on punch cards, but I'd definitely drop
         | card stacks accidentally or get them into a jumble somehow.
         | Having numbered cards and a card sorting machine (radix sort in
         | hardware!) would be extremely helpful then.
        
           | pklausler wrote:
           | Old-timer tip: take a marker and draw a diagonal line across
           | the top of your card deck, from the column 1 left side edge
           | of the first card to the column 80 right side edge of the
           | last card. When you drop the deck, just reassemble the line.
        
             | dmoy wrote:
             | Which sorting algorithm do you use when reassembling? Does
             | it work well with "eyeball it and stick it near correct-ish
             | spot and then fiddle with it later"?
        
       | rdimartino wrote:
       | I'd love to learn more about what `CALL "socket"` is doing. CALL
       | is for running subprograms, but it's not clear to me where
       | "socket" is?
       | 
       | I've thought about a COBOL webserver before, but didn't get
       | beyond reading the GnuCOBOL FAQ that mentions it's possible with
       | CGI https://gnucobol.sourceforge.io/faq/gcfaq.html#id1126
       | 
       | I'm definitely going to dig into this project more later. This is
       | very neat!
        
         | samus wrote:
         | Could simply be the `socket` system call.
        
           | jmsdnns wrote:
           | yep, it calls the external c function. same with setsockopt,
           | bind, and listen further down.
        
       | andrewshadura wrote:
       | IDENTIFICATION DIVISION. PROGRAM-ID. WEBSERVER.
        
       | ethin wrote:
       | I've always wanted to learn Cobol. So, I of course did what I
       | sometimes do and bought the standard. Of course, it then turned
       | out that the standard used inaccessible diagrams instead of any
       | kind of decently modern syntax notation like EBNF, so I could at
       | most only get scraps from the syntax parts and nothing actually
       | useful. I wasn't entirely sure if even learning it would be
       | worthwhile or be something I would be able to do, but I thought
       | eh, why not give it a go?
        
       | tangus wrote:
       | In the late 90's I had a girlfriend who worked for a shop that
       | made web pages in COBOL. I thought those were COBOL's death
       | throes, but apparently I was mistaken...
        
         | z3ratul163071 wrote:
         | that's it. you get the reward for the weirdest gf ever.
        
       | ape4 wrote:
       | Some things are COBOL aren't too bad - eg:                   MOVE
       | SPACES TO REQUEST-BUFFER
        
       | beny23 wrote:
       | Love this!!! Any tips for learning cobol?
        
       | throwaway-18 wrote:
       | My employer has been around 40 nearly 50 years. We still run
       | COBOL for 90% of our business operations. Day-to-day employees
       | work in bluescreens built in RM/COBOL and RM/PANELS.
       | 
       | As recently as the 2010s, we used to emit HTML out of COBOL, but
       | fell short of it directly responding to HTTP requests. Instead,
       | we licensed an RPC layer that sits behind Apache and translates
       | HTTP calls through CGI to a listener on the COBOL side that then
       | invokes COBOL programs. Those programs send back HTML strings
       | through the CGIRPC interface and, well, out comes a webpage in
       | your browser.
       | 
       | We're still using it to serve XML and have turned it into a
       | makeshift web service that helps power a traditional web
       | application.
       | 
       | But, honestly, this is way cooler.
        
       | GartzenDeHaes wrote:
       | COBOL used to drive some government and business web sites. You
       | could tell because the HTML was output in 100 column fixed width
       | format.
        
       | andsoitis wrote:
       | what are you liking about the language?
        
       | brightball wrote:
       | Saw a great talk on COBOL this summer at the Carolina Code
       | Conference
       | 
       | https://youtu.be/RM7Q7u0pZyQ
        
       ___________________________________________________________________
       (page generated 2025-10-03 23:00 UTC)