gui api such as tkinter witnessfor exampleall the care we've taken to escape html and urls in this examplessuch constraints are grounded in the nature of html furthermorechanging the system to retain loaded-mail list state in database between pages would introduce further complexities to the cgi-based solution (andmost likelyyet another language such as sqleven if it only appears near the bottom of the software stackand secure http would eliminate the manual encryption complexity but would introduce new server configuration complexity functionality limitations html can say only so much html is portable way to specify simple pages and formsbut it is poor to useless when it comes to describing more complex user interfaces because cgi scripts create user interfaces by writing html back to browserthey are highly limited in terms of user-interface constructs for exampleconsider implementing an image-processing and animation program as cgi scriptshtml doesn' easily apply once we leave the domain of fill-out forms and simple interactions it is possible to generate graphics in cgi scripts they may be created and stored in temporary files on the serverwith per-session filenames referenced in image tags in the generated html reply for browsers that support the notiongraphic images may also be in-lined in html image tagsencoded in base format or similar either technique is substantially more complex than using an image in the tkinter gui librarythough moreoverresponsive animation and drawing applications are beyond the scope of protocol such as cgiwhich requires network transaction per interaction the interactive drawing and animation scripts we wrote at the end of for examplecould not be implemented as normal serverside scripts this is precisely the limitation that java applets were designed to address-programs that are stored on server but are pulled down to run on client on demand and are given access to full-featured gui api for creating richer user interfaces neverthelessstrictly server-side programs are inherently limited by the constraints of html beyond html' limitationsclient-side programs such as pymailgui also have access to tools such as multithreading which are difficult to emulate in cgi-based application (threads spawned by cgi script cannot outlive the cgi script itselfor augment its reply once sentpersistent process models for web applications such as fastcgi may provide options herebut the picture is not as clear-cut as on the client although web developers make noble efforts at emulating client-side capabilities-see the discussion of rias and html ahead--such efforts add additional complexitycan stretch the server-side programming model nearly to its breaking pointand account for much of the plethora of divergent web techniques the pymailcgi server