{"id":133,"date":"2006-05-15T03:59:34","date_gmt":"2006-05-15T10:59:34","guid":{"rendered":"http:\/\/www.red-sweater.com\/blog\/133\/frameworks-kits-and-caboodles"},"modified":"2006-05-15T04:44:25","modified_gmt":"2006-05-15T11:44:25","slug":"frameworks-kits-and-caboodles","status":"publish","type":"post","link":"https:\/\/redsweater.com\/blog\/133\/frameworks-kits-and-caboodles","title":{"rendered":"Frameworks, Kits and Caboodles"},"content":{"rendered":"<p>John Gruber <a href=\"http:\/\/daringfireball.net\/2006\/05\/web_kit_vs_webkit\">is annoyed<\/a> by the simultaneous use of &#8220;Web Kit&#8221; and &#8220;WebKit&#8221; when ostensibly referring to the same thing. While his complaint boils down to allegations of editorial laziness, there may be a more benign cause. In any case his post opens up a can of very interesting worms.<\/p>\n<p>\nI think the confusion comes from the fact that in most cases, when these distinct terms are used, the author is not referring to <em>exactly<\/em> the same thing. The Web Kit is a <em>development technology<\/em> from Apple. There is a tradition of calling such an aggregation of functionality a &#8220;kit.&#8221; So among all the kits that Apple provides, the Web Kit is, you know, the Web one.\n<\/p>\n<p>\nThe <em>framework<\/em> called WebKit is the principal code component of Web Kit, but not the only one. WebCore and JavaScriptCore are important sub-frameworks. Gruber points out that WebCore is consistently referred to with its CamelCase form. That&#8217;s because it&#8217;s a framework only. Not a kit or any otherwise loftier entity.\n<\/p>\n<p>\nAs programmers who deal largely in framework and header names, we tend towards using the CamelCase versions of such technology names. This habit probably comes partly from technical geekiness, and partly because doing otherwise in our code would result in compiler errors.\n<\/p>\n<p>\nAdmittedly, the use of umbrella frameworks by Apple prevents us from frequently doing:\n<\/p>\n<p><pre>#import &lt;AppKit\/AppKit.h><\/pre>\n<\/p>\n<p>\nBut when we <em>do<\/em> find occasional to include from or load code dynamically from that framework, we must refer to it as &#8220;AppKit.&#8221; This is more than convention, it&#8217;s the law! Similarly, programmers who employ Apple&#8217;s Web Kit must cite it by it&#8217;s fundamental framework&#8217;s name:\n<\/p>\n<p><pre>#import &lt;WebKit\/WebKit.h><\/pre>\n<\/p>\n<p>\nSimilarly, in my last position at Apple, I worked on the &#8220;Core Services&#8221; team. But our framework was (and is) called CoreServices. Both terms are in common use.\n<\/p>\n<p>\nLet&#8217;s take a look at the primary violation cited in Gruber&#8217;s article. His snapshot of an Apple web page shows use of WebKit and Web Kit side-by-side:\n<\/p>\n<p>\n<img decoding=\"async\" src=\"http:\/\/www.red-sweater.com\/blog\/images\/webkit-web_kit.png\"\/>\n<\/p>\n<p>\nBut notice the (relative) consistency here. Web Kit is a concept. A big thing. It&#8217;s got a Version Matrix (caps and spaces!) for crying out loud. WebKit on the other hand is &#8220;the system framework used [on Mac OS X].&#8221; The paragraph goes on to inform <em>developers<\/em> that they can download the sources to WebKit (the framework) and <em>build their own.<\/em> By using the sans-espace WebKit nomenclature, the author communicates to developers that the framework itself is specifically being referred to.\n<\/p>\n<p>\nThis issue is a condensation of the difference between technical writing and technical <em>typing<\/em>. As a programmer who  dabbles in both typing and writing, I appreciate Gruber&#8217;s complaint for all its pedantic charm. But these inconsistencies are welcome in my world. Programmers will tend toward using the framework name, and the situation is even &#8220;worse&#8221; than Gruber fears. He cites a few frameworks that seem less vulnerable to CamelCasing than others:\n<\/p>\n<blockquote><p>We don&rsquo;t frequently see this erroneous closing-up of kit names with I\/O Kit or PDF Kit because closing up their names looks bad. <\/p><\/blockquote>\n<p>\nBut these supposed abuses are in fact common in my lexicon. I refer to IOKit and PDFKit just like that, because compilers and other programmers are most likely to understand me when I do. They are also shorter, instantly imply their singularity, and even wiki-able, if that floats you boat. I even think they look beautiful all closed up like that.\n<\/p>\n<p>\nThe <a href=\"http:\/\/dictionary.oed.com\/\">OED<\/a> lists the etymology of &#8220;caboodle&#8221; as supposedly a &#8220;corruption of the phrase kit and boodle.&#8221; So even if Gruber&#8217;s complaint proves well-founded, abusing the word &#8220;kit&#8221; is a time-honored tradition that will no-doubt be preserved.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>John Gruber is annoyed by the simultaneous use of &#8220;Web Kit&#8221; and &#8220;WebKit&#8221; when ostensibly referring to the same thing. While his complaint boils down to allegations of editorial laziness, there may be a more benign cause. In any case his post opens up a can of very interesting worms. I think the confusion comes [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,11,15],"tags":[],"class_list":["post-133","post","type-post","status-publish","format-standard","hentry","category-apple","category-cocoa","category-programming"],"_links":{"self":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/posts\/133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/comments?post=133"}],"version-history":[{"count":0,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"wp:attachment":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}