{"id":1826,"date":"2010-08-18T23:38:09","date_gmt":"2010-08-18T21:38:09","guid":{"rendered":"http:\/\/daniel.haxx.se\/blog\/?p=1826"},"modified":"2010-11-08T11:59:48","modified_gmt":"2010-11-08T10:59:48","slug":"what-do-you-see-in-a-future-curl","status":"publish","type":"post","link":"https:\/\/daniel.haxx.se\/blog\/2010\/08\/18\/what-do-you-see-in-a-future-curl\/","title":{"rendered":"What do you see in a future curl?"},"content":{"rendered":"<p><a href=\"http:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2007\/09\/curl-keywords300.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-64\" style=\"border: 0pt none; margin: 8px;\" title=\"cURL\" src=\"http:\/\/daniel.haxx.se\/blog\/wp-content\/uploads\/2007\/09\/curl-keywords300.jpg\" alt=\"cURL\" width=\"300\" height=\"110\" \/><\/a>During the first few years of the <a href=\"http:\/\/curl.haxx.se\/\">cURL project<\/a> I used to sum up something about the past year and what I expected of the year to come at every anniversary. I stopped that at some point as I felt I didn&#8217;t have much new to contribute with, it mostly got repetitive over the years. I&#8217;ve never been the guy with the eyes fixed at the horizon and a grand plan of what to do in a future or work towards on a long-term basis. I&#8217;m more the guy with my feet firmly on the ground solving today&#8217;s problems right now as good as possible so that it stays stable and fine tomorrow.<\/p>\n<p>So here follows some thoughts and reasoning around stuff that may and may not be the future of curl and libcurl. I&#8217;m as always putting my trust in you my friends to help me out with the details&#8230;<\/p>\n<p><strong>Protocols<\/strong><\/p>\n<p>curl&#8217;s wide protocol support has surprised even me. While I think the amount of protocols that <em>can<\/em> be supported without bending over backwards far too much is shrinking rapidly, I also think that we&#8217;ve learned that there are always more protocols that can be supported and that people will like to use with curl and libcurl. I expect more to come.<\/p>\n<p>Specific protocols that are on the watch list include:<\/p>\n<ul>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Gopher_%28protocol%29\">Gopher<\/a> &#8211; I just had to mention it just because curl doesn&#8217;t currently support it, it was there once but got yanked out when we found out it didn&#8217;t work and hadn&#8217;t been doing so for a very long time without anyone noticing! The support is about to come back though thanks to a patch being worked on right now.<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/SPDY\">SPDY<\/a> is the Google HTTP replacement (experimental) protocol that if it turns out successful seems like a very important piece for curl to grok.<\/li>\n<li><a href=\"http:\/\/daniel.haxx.se\/blog\/2010\/08\/06\/websockets-right-now\/\">Websockets<\/a> will come to stay in your browser and it will happen soon. To remain a really powerful web scraper tool in the future with more and more sites switching to using Websockets for parts of its functionality, I believe at least some level of support might be required.<\/li>\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Stream_Control_Transmission_Protocol\">SCTP<\/a>. Long-shot.This transport layer protocol was standardized in 2007 but really has not taken off in any significant way, even though it features a lot of benefits compared to TCP in many aspects. The now dead <a href=\"http:\/\/tools.ietf.org\/html\/draft-natarajan-http-over-sctp-02\">HTTP over SCTP<\/a> internet-draft shows that HTTP can indeed be moved over to use it and it would solve a bunch of the same problems that SPDY does (and <a href=\"http:\/\/daniel.haxx.se\/blog\/2009\/07\/31\/multipath-tcp\/\">MPTCP<\/a>). SCTP also has its own share of problems that hamper its adoption, primarily the lack of support in middle-boxes like NATs and routers.<\/li>\n<\/ul>\n<p>Do you think there&#8217;s any particular other protocol we should support in a future?<\/p>\n<p><strong>Stability<\/strong><\/p>\n<p>I&#8217;m not sure if curl is particular unstable. I don&#8217;t think it suffers from any unusual amounts of bugs or anything, but I figure a decent list of stuff to consider for the future is if we make things within the project in a good way. Do we use the proper procedures so that we reach stability and produce a good product? Should we fix, change or replace certain ways or practices so that our outputs get less flaws?<\/p>\n<p>I suspect these questions are hard for someone as involved and inside the project as myself. Possibly it is also hard for someone coming from the outside to convince us old-timers about anything like that too&#8230;<\/p>\n<p><strong>Interface<\/strong><\/p>\n<p>The current libcurl API was basically introduced when libcurl was first made a reality back in the year 2000. While the multi interface and the subsequent multi_socket API were added later on, they are both heavily influenced and affected by the previous easy interface.<\/p>\n<p>Maybe there&#8217;s a much better API we should have that would make it easier to make a better library and easier to write better application using this library? It would require some serious brain-storming to come up with something, or perhaps there&#8217;s someone out there who already have thought something out?<\/p>\n<p><strong>Contributors<\/strong><\/p>\n<p>We&#8217;re but a few people who push commits to the master branch. How should we proceed to attract more? Should we work differently, perhaps have sub-maintainers for parts of the code etc? Can we work differently or make anything better to encourage more people to send bug reports and\/or patches?<\/p>\n<p>We do in fact have a very low level to entry already so I&#8217;m not aware of many additional things we can carve out to streamline this further.<\/p>\n<p><strong>Sponsors<\/strong><\/p>\n<p>As friends of me know, I always feel a little bit envy for projects and developers who manage to get corporate sponsors or otherwise enough paid support contracts to make them able to work on their pet projects full-time or at least part-time. I certainly have never reached that level for more than just a few months at a time. I&#8217;m not sure this is very important, as lack of funding doesn&#8217;t stop us it just slows us down and really, in an open source project like ours there aren&#8217;t really many hard deadlines. If it doesn&#8217;t get done now, it&#8217;ll get done later if enough people want it to happen.<\/p>\n<p>Getting funding isn&#8217;t always easy either, since there may very well appear a company that wants to pay for a feature to get added but we don&#8217;t agree that it is a feature suitable for the project&#8230;<\/p>\n<p><strong>Organization<\/strong><\/p>\n<p>At times I think of the long-term future of our little project. Like what&#8217;s gonna happen the day I want to give up my chieftainship or if a company would like to step up and sponsor the project, but won&#8217;t be able to because there&#8217;s no actual legal entity for the project to sponsor or pay.<\/p>\n<p>Would it make sense to have a curl organization? We could (I presume) easily join an umbrella organization like <a href=\"http:\/\/en.wikipedia.org\/wiki\/Apache_Software_Foundation\">ASF<\/a>. Or perhaps even more suitable the <a href=\"http:\/\/conservancy.softwarefreedom.org\/\">Software Freedom Conservancy<\/a>. I will certainly not advocate setting up our own non-profit or anything like that.<\/p>\n<p>I don&#8217;t think FSF or GNU will ever be a serious alternative since a pretty solid design goal of mine has been to avoid the *GPL licenses for curl to keep it attractive for commercial interests in a higher degree than (L)GPL licensed projects are. (This is not a license debate, so please don&#8217;t lecture me about the existence of GPL&#8217;ed commercial stuff.) I will not change license.<\/p>\n<p><strong>Feedback<\/strong><\/p>\n<p>One thing I&#8217;m sure of though, is that we will continue to listen to our users and the general curl and libcurl community about what to work on and what isn&#8217;t good and what we should do next. Please tell me your opinions and views on these matters!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>During the first few years of the cURL project I used to sum up something about the past year and what I expected of the year to come at every anniversary. I stopped that at some point as I felt I didn&#8217;t have much new to contribute with, it mostly got repetitive over the years. &hellip; <a href=\"https:\/\/daniel.haxx.se\/blog\/2010\/08\/18\/what-do-you-see-in-a-future-curl\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">What do you see in a future curl?<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[33,296,294,287],"class_list":["post-1826","post","type-post","status-publish","format-standard","hentry","category-curl","tag-curl-and-libcurl","tag-sctp","tag-spdy","tag-websockets"],"_links":{"self":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/1826","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/comments?post=1826"}],"version-history":[{"count":19,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/1826\/revisions"}],"predecessor-version":[{"id":2260,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/posts\/1826\/revisions\/2260"}],"wp:attachment":[{"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/media?parent=1826"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/categories?post=1826"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.haxx.se\/blog\/wp-json\/wp\/v2\/tags?post=1826"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}