<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Trausch’s Little Home &#187; computing</title>
	<atom:link href="http://mike.trausch.us/blog/tag/computing/feed/" rel="self" type="application/rss+xml" />
	<link>http://mike.trausch.us/blog</link>
	<description>My writing on life, computers, and technology</description>
	<lastBuildDate>Wed, 09 Feb 2011 18:16:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>More About Networking, Part 2: NAT</title>
		<link>http://mike.trausch.us/blog/2011/01/31/more-about-networking-part-2-nat/</link>
		<comments>http://mike.trausch.us/blog/2011/01/31/more-about-networking-part-2-nat/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 23:54:23 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[The Internet]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[IPv4]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=647</guid>
		<description><![CDATA[In my last post, I talked about the underpinnings of networking at the lower layers. This post is going to talk about NAT: network address translation. NAT is almost as universal as IPv4 networking, and is used nearly universally on home and small-and-medium-sized business networks—with good reason, too: Having more than one IPv4 address carries [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a title="Trausch's Little Home: Learning More About Networking" href="http://mike.trausch.us/blog/2011/01/29/learning-more-about-networking/" target="_blank">last post</a>, I talked about the underpinnings of networking at the lower layers. This post is going to talk about NAT: <a title="Wikipedia: Network address translation" href="https://secure.wikimedia.org/wikipedia/en/wiki/Network_address_translation" target="_blank">network address translation</a>. NAT is almost as universal as IPv4 networking, and is used nearly universally on home and small-and-medium-sized business networks—with good reason, too: Having more than one IPv4 address carries with it a not-insignificant monetary cost. This entire post is going to be about what NAT is, and what function it performs in any network, and alternatives to NAT which can be used on both IPv4 and IPv6 networks.</p>
<h2>What is NAT?</h2>
<p>NAT, or network address translation, is a mechanism that attempts (and fails, in many cases) to provide transparent access to the Internet for multiple IP-networked devices that can not all have public IPv4 addresses. For example, it is used in homes and many small businesses to provide Internet connectivity to multiple computers on a single connection to the Internet with a single public IP address. NAT was invented in the early 1990s (approximately 1993, if memory serves) in an attempt to delay the exhaustion of the IPv4 address space. It was effective, too, for that purpose—we probably would have ran out of IP addresses ten years ago had NAT not come into existence.</p>
<p>NAT has one major advantage: it enables an entire network to share a single IP address, thus conserving address space. However, NAT comes with a number of disadvantages at different levels. Some of these disadvantages are:</p>
<ul>
<li>Increase in network operations overhead. Most types of NAT require the ability to maintain additional tables in memory which support the task of both address and port number translation.</li>
<li>Having a NAT increases the complexity of a network at the IP layer. This will be discussed in more detail in a few minutes.</li>
<li>Any NAT device will perform more slowly and consume more resources than a plain router—for most computer systems, this is not a major problem. However, for networks with high-bandwidth Internet connections which are using embedded devices for routing (such as a simple, consumer-grade wireless router) this can be a problem. It can also be a problem for any network that has very old routing equipment that has been retrofitted with the ability to perform NAT, as such devices were not designed with enough processor to handle the additional overhead when the network is at full load.</li>
<li>In network operating systems which behave as routers, NAT is often implemented in the same area as the firewall. For example, in the Linux kernel, the <tt>iptables</tt> command is used to set up NAT networking on an IPv4 network, and <tt>iptables</tt> is the front-end to the Linux kernel&#8217;s built-in firewall capabilities. This increases the complexity of the firewall code itself, and can make it more difficult to maintain in general, as well as more difficult to audit for security problems.</li>
<li>End-to-end communication is broken. The Internet was originally designed with the concept of <em>end-to-end communication</em>; that is, one system on the Internet can converse with another system on the Internet directly. Not only does this simplify network design, but it simplifies the design of network applications, as well (particularly those that require bidirectional communication but do not always maintain a persistent connection and require the ability for either side to reconnect upon some sort of a trigger). Some protocols (such as SIP) have worked around this, but such workarounds can be high-cost as well as brittle.</li>
</ul>
<p>The removal of NAT from protocol stacks therefore yields a number of benefits, including removing all of the disadvantages above. With the transition to IPv6, NAT devices are no longer necessary. Their additional complexity can go away, and networks all around the world will operate more efficiently and with less latency than they do now. It still takes I/O and processor resources to perform normal routing, but nowhere near as much as it does to perform NAT.</p>
<p>Over the years, multiple types of NAT implementations have been created. I am not going to go into a terribly detailed analysis of them all, but they are:</p>
<ul>
<li>Full-cone NAT (or, 1:1 NAT). This type of NAT provides no conservation of the address space; one external IP address maps exactly to one internal IP address. While there are uses for this type of NAT, I can think of no use for it that is not better served by another type of device, such as a load balancer, monitoring and failover, or plain routing.</li>
<li>Address-restricted cone NAT. This is one of the two most common types of NAT. When a system on the inside (usually using <a title="RFC 1918" href="http://tools.ietf.org/html/rfc1918" target="_blank">RFC 1918</a> IP address space) sends an IP packet to the outside, the NAT remembers the IP address, protocol, and port of the internal system and relays it to its destination. The destination system may reply by sending packets from any of its own ports to the NAT on the source port that it sent the original packet from.</li>
<li>Port-restricted cone NAT. This is the other of the two most common types of NAT. When a system on the inside sends an IP packet to the outside, the NAT remembers the same things as for address-restricted cone NAT, but replies from the destination must come from the same port as the packet was sent out to.</li>
<li>Symmetric NAT. This type of NAT is similar to port-restricted cone NAT.</li>
</ul>
<p>It is important to consider that a single NAT implementation may combine behaviors from one or more of these types, and some implementations are extremely configurable in terms of what method or methods are used to perform the functions of NAT. It is also important to realize that NAT breaks many legal network behaviors, depending on the application and the type of NAT in use. Various workarounds have been developed in order to <em>traverse</em> NAT devices for some protocols, and sometimes protocols will change in order to add <a title="Wikipedia: NAT traversal" href="https://secure.wikimedia.org/wikipedia/en/wiki/NAT_traversal" target="_blank">NAT traversal</a> as a core feature, but the overall effect is that NAT (often significantly) reduces network efficiency.</p>
<h2>What is NAT not?</h2>
<p>NAT is <em>not</em> a security mechanism.</p>
<p>Let me repeat that: <strong>NAT is <em>not</em> a security mechanism.</strong></p>
<p>One more time: <strong><em>NAT IS NOT A SECURITY MECHANISM.</em></strong></p>
<p>I am uncertain where people have gotten the idea that somehow NAT was designed to increase security. It was not. It was designed to help conserve the increasingly scarce resource of IPv4 address space, nothing more. It <em>is not</em> a security tool, and it <em>does not</em> provide any additional security over a properly maintained IP firewall—using a firewall is essential with <em>or without</em> a NAT in place if you need to do any sort of packet filtering at all.</p>
<p>The idea that NAT is a security mechanism probably came from the notion that one cannot see the addresses on the inside of a NAT. However, there are many mechanisms by which a sufficiently interested attacker would be able to determine things such as an approximate (or even an accurate!) count of how many devices are behind the NAT and what their IP addresses are through the use of various protocols, application tricks, and security exploits. For that matter, it is trivial to do things such as setup IPv6 on a NAT&#8217;d network and give all the systems on the NAT&#8217;d network a globally reachable IPv6 address, all without the cooperation of the NAT device. Only a firewall can stop such a thing, and only if you know what it is that you are trying to stop. And there are some things that even a firewall cannot protect you from (such as trojan horses and intentionally malicious employees and ex-employees). Security is an insanely complex problem to solve, and NAT is not a tool in a security professional&#8217;s toolbox.</p>
<h2>How does NAT work?</h2>
<p>A NAT device has a fully functional IP stack, and operates at a combination of OSI layers 3 (Network Layer) and 4 (Transport Layer)—mostly layer 4. In comparison, a router is an OSI layer 3 device. (In case you haven&#8217;t memorized the OSI model yet, refer back to my <a title="Trausch's Little Home: Learning More About Networking" href="http://mike.trausch.us/blog/2011/01/29/learning-more-about-networking/" target="_blank">previous post which shows it</a>.) Let&#8217;s say that you have a computer system that is on an IPv4 network, and that IPv4 network is using NAT. When you came to my blog to pull up this post, your Web browser performed the following tasks:</p>
<ol>
<li>It looked in its DNS cache to see if the hostname <strong>mike.trausch.us</strong> was there. If it was, it used the IP address from the cache; if not, it asked your computer to find the IP address for <strong>mike.trausch.us</strong>.</li>
<li>Then, it asked the operating system to open a TCP socket connected to the IP address for <strong>mike.trausch.us</strong> on port <strong>80</strong>. Since you are reading this, it is probably safe to say that it succeeded, and it was given a socket to work with.</li>
<li>It then asked my Web server for the post, which my Web server kindly gave to you. There are a few back-and-forths that I am omitting here for the sake of clarity.</li>
<li>The connection from your computer to my Web server was then closed.</li>
</ol>
<p>In a normal (that is, non-NAT&#8217;d) network, this was all nice and direct, and the edge router on your network made it possible for your packets to get here. Even better, in such an event, the chatter in such an event is directly between your computer and my Web server. However, on a NAT&#8217;d network, this is not the case. Instead, this is (some of) what happens:</p>
<ol>
<li>﻿﻿Your browser looked in its DNS cache to see if the hostname <strong>mike.trausch.us</strong> was there. If it was, it used the IP address from the cache; if not, it asked your computer to find the IP address for<strong>mike.trausch.us</strong>.</li>
<li>Then, it asked the operating system to open a TCP socket connected to the IP address for <strong>mike.trausch.us</strong> on port <strong>80</strong>.</li>
<li>Your computer&#8217;s operating system opened the socket, <em>but not to my Web server</em>. It just thinks it did. When the packet went out that was supposed to start the TCP handshake, it ended up at your NAT.</li>
<li>Your NAT sees the packet, and makes a note of what the source IP address (your private IP) and source port was.</li>
<li>The NAT notes the (source IP, source port) pair, and notes the destination address (e.g., the IP address for <strong>mike.trausch.us</strong> in this instance), the protocol (in this case, <strong>TCP</strong>) and sometimes also the port number (in this case, TCP port <strong>80</strong>).</li>
<li>It then forwards the packet to my Web server on port 80.</li>
<li>My Web server receives the packet, which at this point appears to come from your external IP address, and probably a different port from the source port on your computer.</li>
<li>My Web server sends a return packet, <em>directed at your NAT device&#8217;s IP address and the port that it sent your packet from</em>.</li>
<li>When your NAT receives the packet, it looks in its table of entries to see if it has a mapping for the IP address and port it received a packet on.</li>
<li>It then forwards my acknowledgement to your computer.</li>
<li>All of the rest of the steps are the same, but with the NAT intercepting, looking up, and rewriting <em>every single packet</em> before it is shipped to its destination (either your computer or my Web server).</li>
</ol>
<p>It is a lot more complex to do all of this, obviously.</p>
<p>And for larger networks, it won&#8217;t scale at all: multiple external addresses will have to be used to represent the whole network, because each NAT device can only have a mapping for one system and one (IP, port) combination at a time. What that means is that for larger NAT&#8217;d networks, you might have a different &#8220;public&#8221; IP address for every connection—or if you have a large network and only one external IP address to NAT with, you might actually wind up sometimes not being able to connect to anything at all, because the mapping table in the NAT is full.</p>
<h2>So I Have to Learn to Use a Firewall?</h2>
<p>Yes. Well, no. Well, sort of.</p>
<p>Consumer devices for use in home networks that support native IPv6 will most likely be running their own firewall with a reasonably sane default set of rules (and hopefully, the ability to change those rules!). For example, not allowing inbound packets to protected ports (those below 1024) and ports well-known to be open and accessible by default by operating systems in the Microsoft Windows family. Of course, it will also be up to people to not install services on their computer systems that are configured to service the world. That&#8217;s not terribly hard, given that we have the loopback network (127/8) that is reserved for use locally (such IP addresses aren&#8217;t even allowed to reach the physical network outside of a sole system).  This means that a system can run services that aren&#8217;t to be exposed to the world (for testing, or in order to protect them from access without first using an SSH tunnel, or for any manner of other things).</p>
<p>Very small, client-system-only networks will most likely use consumer-grade devices, as well, and need not worry about it for the same reasons that home networks won&#8217;t likely need to worry about it.</p>
<p>Power users, network administrators, and everyone else in between can instead just configure a firewall. Whatever device is providing core routing functionality more likely than not has the ability to perform firewalling as well—and if not, it&#8217;s easy to obtain an operating system and a computer that can perform the task. After all, Linux, the BSD family, and most other UNIX and UNIX-like operating systems not only can function as routers, but can firewall (and Linux and the BSDs are free). If you are the administrator of a network that has more than ten nodes on it, or the administrator of an any-sized network that has more than zero server systems on it, you should know how to use a firewall both in general and the particular implementation that you have.</p>
<h2>What About <a title="RFC 4193" href="http://tools.ietf.org/html/rfc4193" target="_blank">RFC 4193</a> (IPv6 Private Address Space)?</h2>
<p>RFC 4193 does indeed provide for private address space in IPv6. That does not necessarily mean that it has to have NAT. Private address space can be used to ensure that one or more subnetworks have absolutely zero Internet connectivity (or can use something such as an IPv6-enabled <a title="Wikipedia: SOCKS" href="https://secure.wikimedia.org/wikipedia/en/wiki/SOCKS" target="_blank">SOCKS</a> server in order to have strictly controlled connectivity). However, more often than not, servers that require such security need not use address space reserved for it by RFC 4193, as it would unnecessarily complicate the network. Instead, one could use a single subnet out of their allocation of subnets, treat that subnet as &#8220;dark&#8221; or private, and configure the firewall to prohibit all (direct) communication with that subnet. If you have a correctly configured network this is trivial.</p>
<p>Private address space in IPv6 can also be useful to create disconnected islands, or testbed networks. However, in production networks, I would expect to see a business that has a /48, for example, simply devote a single subnetwork to private-use.</p>
<p>There are other means by which one can protect their network without NAT; see <a title="RFC 4864" href="http://tools.ietf.org/html/rfc4864" target="_blank">RFC 4864</a> (&#8220;Local Network Protection for IPv6&#8243;) for more information.</p>
<h2>So, no NAT in the future?</h2>
<p>That&#8217;s right. We are heading to a world without NAT, a world where no NAT is needed, and a world where the overhead of the Internet as a whole will be reduced as a result. That pretty much wraps it up for today&#8217;s post. Questions? Comments? You know what to do with ’em!</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2011/01/31/more-about-networking-part-2-nat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>If you&#8217;re going to support someone, know what you&#8217;re doing</title>
		<link>http://mike.trausch.us/blog/2010/06/29/if-youre-going-to-support-someone-know-what-youre-doing/</link>
		<comments>http://mike.trausch.us/blog/2010/06/29/if-youre-going-to-support-someone-know-what-youre-doing/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 01:23:16 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=620</guid>
		<description><![CDATA[It boggles the mind what some people will actually do—to what ends they will go to try to “show up” someone or make themselves look better. What is even worse is when it is pure marketing bullshit. I am sure that there are people who do this in every single line of work. But what [...]]]></description>
			<content:encoded><![CDATA[<p>It boggles the mind what some people will actually do—to what ends they will go to try to “show up” someone or make themselves look better. What is even worse is when it is pure marketing bullshit.</p>
<p>I am sure that there are people who do this in every single line of work. But what disgusts me more than anything is someone who thinks that just because they did something like served in the military or got a degree of some sort that they <em>know everything</em> and that <em>everyone else has to prove that they have two brain cells to rub together</em>. Do you know what someone with a Ph.D. is good at? <strong><em>Marketing</em><span style="font-weight: normal;">. They have to be.</span></strong></p>
<p><strong><span style="font-weight: normal;">You know what I hate with a passion? </span><em>Marketing</em><span style="font-weight: normal;">. Because most of the time it is hogwash.</span></strong></p>
<p>What prompts this, you might wonder?</p>
<p>So today, I responded to an unexpected downtime call. Long story short (because details cannot be given out, for obvious reasons), this meant that I got up out of bed to answer it. No problem; it&#8217;s what I do. I go, I handle the problem, I encounter a couple of snags, find that I no longer have authorization to fix those snags, and go on about my day, providing a notification of the issues that I wasn&#8217;t able to fix—and why. As far as the “fix”, I had to switch to a backup connection on a mixed voice/data T1 (technically, DS1, but nobody calls it that except the engineers, I am pretty sure). No big deal; the equipment is setup to handle that, and it works just fine, albeit slower than anyone would like it to.</p>
<p>Enter <em>Fatuous</em>. <em>Fatuous</em> is someone who is employed as an “Information Technology” support person. Of course, that is not its real name, but it is suitable nonetheless.</p>
<p><em>Fatuous</em> sends an email to the effect of “you cannot run data through the T1 because it will make voice calls suffer”. Let’s keep in mind here that this particular equipment does both voice and data, and it gives preference to voice calls. In other words, if all the circuits are busy handling voice calls, there is no more room for bandwidth. Sounds simple, right? It should, because it is.</p>
<p>So, I explain this little fact, and I get a mail back—oh, yeah, and <strong><em>half the office</em><span style="font-weight: normal;"> is </span><em>needlessly carbon copied</em><span style="font-weight: normal;"> on this. Great! Let us fill everyone’s inboxes with a bunch of technical jargon that they will not care to read and (probably) have no desire to understand. Well, whatever. So the mail basically says, “Cite something, you’re wrong.” Wait a minute, what? <em>Fatuous</em> seriously does not understand what a T1 is. Now, if you have worked in the IT industry for any period of time, <em>even if you have never used one</em>, you should really know what a T1 is. Especially if you are over the age of, say, 25 or 30. Particularly if you are over the age of 40, since it is quite likely that’s what they were using for high-speed interlinks then (nevermind the fact that it is only a little bit faster than a low-end <a title="ARCNET at Wikipedia" href="http://en.wikipedia.org/wiki/ARCNET">ARCNET</a> card/network it was once considered high-speed connectivity, just as ARCNET was).</span></strong></p>
<p><strong><span style="font-weight: normal;">Fine, so I explain what this means in a high-level, cursory overview that hopefully had words small enough for <em>Fatuous</em> to understand. In the meantime, I am raving mad. I have dealt with <em>Fatuous</em> enough that it is readily apparent that there is no salvation here: its ignorance is willfully incurable, and that is terribly sad. I am not sure what is worse: the fact that it has a job doing something I am way overqualified for, or the fact that it has a job doing something that I am way overqualified for </span><em>and</em><span style="font-weight: normal;"> makes a fuck of a lot more money than I do.</span></strong></p>
<p>Sometimes, I really hate the universe.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/06/29/if-youre-going-to-support-someone-know-what-youre-doing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On FatELF, or &#8220;Because 140 characters isn&#8217;t enough for a discussion&#8221;</title>
		<link>http://mike.trausch.us/blog/2010/06/23/on-fatelf-or-because-140-characters-isnt-enough-for-a-discussion/</link>
		<comments>http://mike.trausch.us/blog/2010/06/23/on-fatelf-or-because-140-characters-isnt-enough-for-a-discussion/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 21:01:44 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[linux-kernel]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=617</guid>
		<description><![CDATA[So, I have someone on Identi.ca (@flameeyees@identi.ca) discussing with me me about my views on FatELF. No biggie, but trying to continue the argument (pointless as it is) there is just too much work: the character limit does not permit real discussion on such a complex issue. So, permit me to address each of the [...]]]></description>
			<content:encoded><![CDATA[<p>So, I have someone on Identi.ca (<a title="&quot;flameeyes&quot; on identi.ca" href="http://identi.ca/flameeyes">@flameeyees@identi.ca</a>) discussing with me me about my views on FatELF. No biggie, but trying to continue the argument (pointless as it is) there is just too much work: the character limit does not permit real discussion on such a complex issue. So, permit me to address each of the issues raised as I understand them and rebut. Then conversation can continue, if at all desired (though seriously, I don&#8217;t know that *I* desire to do so).</p>
<p>First point: FatELF would be useless because &#8220;<a href="http://identi.ca/notice/37727809">you can do that already, write a cc frontend that compiles the same file multiple times, it&#8217;s _not_ hard, I&#8217;ve done it before</a>&#8220;. Okay, so the proposed solution here is to write a compiler driver that will interpret arguments and, from a single Makefile, build for multiple platforms. There might even be something out there for that, but simply put, if GCC supported this feature intrinsically, then <em>everyone</em> would have it and it would be done in a <em>standard</em> way. Free software works better when everyone can agree on a single standard way of doing things, and not <em>just</em> a single standard template for how it might be done. Using addons to perform this function still yields multiple binaries that have to be shipped anyway, which is decidedly not the aim.</p>
<p>Second point: &#8220;<a href="http://identi.ca/notice/37728093">how is shipping one (fat) binary &#8216;better&#8217; than shipping one auto-extracting auto-deciding archive?</a>&#8221; Making the assumption that the toolchain and kernel all support the feature as a standard thing here, the difference is simple: the kernel ELF loader would be able to decide which sections of the ELF file should actually be loaded in memory, read only those sections, and go on about its business normally—the rest of the process would not need to change in any way. No temporary copies need to be made, no images need to be extracted, nothing like that has to be done. However, the inverse is quite a different story. Let&#8217;s make the assumption that you&#8217;re using a POSIX shell script, with the archive of all of the possible binaries appended to the POSIX shell script. First, the script has to be prepended to EVERY such archive (meaning that different versions of the script could exist, and as any programmer knows, <a href="http://en.wikipedia.org/wiki/DRY">DRY</a>), and the script is not going to be trivial: it would have to have code to detect and support every single individual platform. Furthermore, it would require that the user have permission to extract the payload, make it executable, and run it. This is the same deficiency that makes gzexe impractical for everyday use; I know that at least on all the servers that I manage, /tmp is mounted read-write but with execution of scripts and binaries disabled. Finally, it would fail to properly work in the event that something needed to be setuid—that information would have to be in the payload itself, which is absolutely not portable from one system to another. It just cannot be made to work in a generic enough fashion to be reliable on all different types of platforms with different administrative decisions made in the management of those platforms, and in many cases would require an increased attack surface just to be made workable.</p>
<p>However, if FatELF (or, honestly, anything that is <em>truly</em> equivalent) were used, an administrator could copy the binary from one system (say, an x86) to another system (say, a PowerPC) that has all of the other dependencies filled for it, drop it on the filesystem, chown/chmod it once, and it would Just Work. setuid, if needed, would be honored by the kernel, and no extraction has to take place. No additional temporary disk space would be required, nor would it be necessary to incorporate any logic into the ad-hoc &#8220;loader&#8221; (if it could even be called that) to try to find a filesystem that is read-write with execution permitted for the current user, and therefore no special privileges from the user would be necessary.</p>
<p>In fact, the only way to solve the problem reliably at present would be to have something like /var/cache/adhoc-fat-binaries, and have all ad-hoc &#8220;fat binaries&#8221; be setuid 0 (or setuid to some user that has all necessary privileges to make something setuid 0 if necessary, probably only UID 0 has that privilege on most systems) so that it could (a) write to /var/cache/adhoc-fat-binaries and (b) set the setuid or setgid bits if necessary for the program to fulfill its function. And it deserves to be restated: we all know that having a single specific standard and adhering to it—even when the standard is less than ideal (and in some cases, like X11, <em>falls quite short</em> of ideal)—is far better than having 100 different and incompatible ways to do the same thing. It&#8217;s one of the things that we people in free software know pretty damn well.</p>
<p>See, I don&#8217;t see something like FatELF being used for distribution binaries, or anything that would be distributed in an operating system distribution package, except perhaps in special situations where something like biarch is natively supported on the hardware and it would be feasible to permit that sort of flexibility. Instead, I see something like my current situation: I administer several machines for small businesses, and not all of them are the same hardware platform.  They are all the same operating system and many of them have the same libraries installed.  Some of them are 64-bit and some are 32-bit.  Some are x86, some x86-64, and some are neither. But I would very much like to write a single program, say &#8220;make&#8221; and copy the file to every machine so that it just works. For the moment, if I want something like that, I have to just use something like Java, C#, or a script. Or, if I need something setuid, I do it in C and compile it for every system, shipping the source code file to the systems instead. But it would be more efficient to not have to do that. That is why I would see FatELF being a &#8220;good thing&#8221;.</p>
<p>I know that I am in the minority.</p>
<p>That brings me to point three: &#8220;<a href="http://identi.ca/notice/37728644">because in 99% of all usage, the kernel won&#8217;t _need_ it. And its cost in effort and overhead would be higher.</a>&#8221; For this next part of my post here, I am going to be looking at the Linux kernel, version 2.6.34, which I have just downloaded from kernel.org, which is 64 MB compressed (using bzip2!) and takes up 442 MB when uncompressed, before touching any file in the tree. Now, I am looking at this for x86-64 because that is the system I am running on and typed &#8220;make menuconfig&#8221;.</p>
<p>Who needs any of the following options? I am willing to bet that the following options are not needed in 99% of all (desktop, server, and embedded, combined) usage:</p>
<ol>
<li>Processor type and features/Support for extended (non-PC) x86 platforms</li>
<li>Processor type and features/Maximum number of CPUs</li>
<li>Processor type and features/Memory model</li>
<li>Processor type and features/Build a relocatable kernel</li>
<li>Executable file formats / Emulations/Kernel support for ELF binaries</li>
<li>Executable file formats / Emulations/Kernel support for MISC binaries</li>
<li>Executable file formats / Emulations/IA32 Emulation</li>
<li>Executable file formats / Emulations/IA32 Emulation/IA32 a.out support</li>
<li>Networking support/Plan 9 Resource Sharing Support (9P2000) (Experimental)</li>
<li>File systems/Second extended fs support</li>
<li>File systems/Reiserfs support</li>
<li>File systems/JFS filesystem support</li>
<li>File systems/XFS filesystem support</li>
<li>File systems/GFS2 file system support</li>
<li>File systems/OCFS2 file system support</li>
<li>File systems/Dnotify support</li>
<li>File systems/Kernel automounter support</li>
<li>File systems/Kernel automounter version 4 support (also supports v3)</li>
<li>File systems/FUSE (Filesystem in Userspace) support</li>
<li>File systems/FUSE (Filesystem in Userspace) support/Character device in Userpace support</li>
</ol>
<p>I can&#8217;t even go on. Twenty is enough; I think I have made my point. In 99%+ of all situations, these options are either <strong>always on</strong> or <strong>always off</strong>. They are rarely modified. And the kernel still supports a.out from IA32&#8242;s really old days‽ Seriously?</p>
<p>What does this tell me? It tells me that FatELF—or anything else that came along and did something like what FatELF would do—has room in the kernel. And if it were for whatever reason incompatible with current ELF (as it would very likely be) then the kernel could still support &#8220;old&#8221; ELF, without any of the extra fields or sections.</p>
<p>And actually, there is a great deal of possibility around something entirely different altogether. FatELF isn&#8217;t the most technically elegant thing I can think of to solve the problems that it solves, but I have yet to see something else seriously proposed. I can think of something even better, actually. We are all taught that operating systems are here to abstract us from hardware, so that we can write applications and not have to worry about communicating with the hardware directly because the OS handles those details for us. Well, if that is the case, then why don&#8217;t operating systems also abstract the system&#8217;s processor? Why don&#8217;t we have operating system kernels that provide a virtual instruction set? Yes, I <strong><em>am</em><span style="font-weight: normal;"> talking about essentially moving the application VM into an operating system kernel, though ideally with some supporting utilities in userspace to do things like hold persistent JIT caches and so forth. However, that&#8217;s for another post, another time.</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/06/23/on-fatelf-or-because-140-characters-isnt-enough-for-a-discussion/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>We still tolerate and defend racism?</title>
		<link>http://mike.trausch.us/blog/2010/03/24/we-still-tolerate-and-defend-racism/</link>
		<comments>http://mike.trausch.us/blog/2010/03/24/we-still-tolerate-and-defend-racism/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 17:16:39 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[wtf‽]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=600</guid>
		<description><![CDATA[Recently on a mailing list of which I am a member, the following comment was posted: We pay cash at restaurants especially ones of certain nationalities. The context of this quote is a discussion on credit/debit card usage, and this statement came at the tail end of how care must be taken to ensure that [...]]]></description>
			<content:encoded><![CDATA[<p>Recently on a mailing list of which I am a member, the following comment was posted:</p>
<blockquote>
<pre>We pay cash at restaurants especially ones of certain
nationalities.</pre>
</blockquote>
<p>The context of this quote is a discussion on credit/debit card usage, and this statement came at the tail end of how care must be taken to ensure that one is not subjected to fraudulent charges (nevermind the fact that banks in the U.S. mostly do zero-liability these days). This has spawned a rather heated discussion, which apparently resulted in the person who made that comment leaving the mailing list.  The whole idea that we continue to change our behavior <em>depending on the ethnicity of the person(s) we are around</em> is nothing short of infuriating. It is like we fail to understand that qualities like honesty and trustworthiness are markers of an <strong>individual</strong>.</p>
<p>What does the above statement say? It says that the poster of that statement feels that he cannot trust “certain nationalities”. This person later made the claim that it was sad that people could find racism in nearly any remark—but the thing is, it is <strong><em>right there</em><span style="font-weight: normal;">, not even hidden from view. It&#8217;s blatant.</span></strong></p>
<p><strong><span style="font-weight: normal;">Even worse, when the poster of the comment above was called out on it, most of the people on the mailing list jumped to this person’s aid to defend them. Honestly, I do not know what is worse: the fact that this person said this in the first place, or the fact that the majority of the mailing list’s members rallied up on the side of that person. Quite possibly, I think the latter, because that shows that we still have in society the notion that racism is somehow acceptable, and that the more veiled or subtle it is, the more okay and polite it is. I find that downright offensive.</span></strong></p>
<p><strong><span style="font-weight: normal;">It is certainly enough to make me consider dropping the mailing list and participation in the group altogether. It is difficult to be in a group when you cannot even look at its members—your peers—with respect, even if they are some of the smartest minds you know in a particular field. Why be part of it at all?</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/03/24/we-still-tolerate-and-defend-racism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On small offices and computer configurations</title>
		<link>http://mike.trausch.us/blog/2010/03/07/on-small-offices-and-computer-configurations/</link>
		<comments>http://mike.trausch.us/blog/2010/03/07/on-small-offices-and-computer-configurations/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 12:14:11 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=597</guid>
		<description><![CDATA[So for the past couple of weeks I have been doing work at a client’s place of business. This client—like many other small and medium-sized businesses—uses Windows on all of their desktop systems. They have a couple of server boxes that are running GNU/Linux servers, but they are not running GNU/Linux on the desktop at [...]]]></description>
			<content:encoded><![CDATA[<p>So for the past couple of weeks I have been doing work at a client’s place of business. This client—like many other small and medium-sized businesses—uses Windows on all of their desktop systems. They have a couple of server boxes that are running GNU/Linux servers, but they are not running GNU/Linux on the desktop at this point in time.</p>
<p>So, this is a pretty simple-sounding network, yes? It should be—it is just a handful of computer systems. However, there is a problem—a pretty large one, I think. There is very little in the way of either policy or convention on the network. Some users use their documents directory for storing their documents, others store their documents on their desktop, others somewhere differently altogether on the C drive, others on a network share in a public storage space. There are different versions of software on the various machines, more-or-less updated when someone thinks about it, I think.</p>
<p>This is a perfect scenario which shows why a business network should be centrally managed in some form. Note that I am <em>not</em> saying that each machine should be a bit-for-bit mirror image of the one next to it, though that is certainly a possibility. I think that people should be able to use their own choice of things like email client or Web browser software, because everyone is different. But when you have different client applications fulfilling a role on the individual workstations, you have to take a centralized approach to ensuring that things like the email is all backed up.</p>
<p>Furthermore, if you <em>don’t</em> take a centralized approach to backing up such data, it is <em>very</em> difficult to centralize the network storage. Think about adding a domain controller (that is Windows speak for a central server which handles authentication and authorization, as well as file and printer sharing and things like roaming profiles) to such a network. I expect that with multi-gigabyte mail files, things will be <em>very</em> slow at first—and that likely the only fix for them that is going to be viable in the long term is to centralize more infrastructure.</p>
<p>I am too tired to expand more on my thoughts on what I have learned and where it is heading, but the <em>Reader’s Digest</em> version of the point reads something like this: If you are a small to medium sized business, make sure that you have someone who is competent in both system and network administration, and <em>make sure that they are a part of your business from day one</em>. Like writing software, building up a technical infrastructure without careful thought and design is hazardous and comes with many hidden and unpredictable costs. It is best to head those things off right from the start; to delay only amplifies the cost of fixing the underlying problems and puts oneself in the position where fixing one issue can have a domino-like effect and create more new problems.</p>
<p>For my current situation, I think I am going to have to seriously re-think how this whole setup is done. What I do not yet know is how to quickly and efficiently bring things into shape. A bit of training and education may be required, and certainly the removal of a lot of unnecessarily-granted privileges on the workstations. That, too, should be something caught early-on: do not let every person in a business run with administrator privilege, unless they <em>are</em> an administrator (and even they should only run with administrator privilege when they are actually doing something that requires that privilege). If everyone is an administrator, there is little to no control on how things are done in a network, and it can get messy.</p>
<p>I have a lot more reading to do, as well.</p>
<p>Well, anyway, it is <em>way</em> past my bedtime.  Time for sleep.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/03/07/on-small-offices-and-computer-configurations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Uniform Driver Interface—why wasn&#8217;t it adopted?</title>
		<link>http://mike.trausch.us/blog/2010/03/03/the-uniform-driver-interface%e2%80%94why-wasnt-it-adopted/</link>
		<comments>http://mike.trausch.us/blog/2010/03/03/the-uniform-driver-interface%e2%80%94why-wasnt-it-adopted/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 23:31:53 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=592</guid>
		<description><![CDATA[Every now and again, I come back to looking at device drivers and driver-writing, and I wonder why there is not some common interface for device drivers. What would the world be like if we could write a device driver for Linux, and be able to use it on FreeBSD without modification? There was a [...]]]></description>
			<content:encoded><![CDATA[<p>Every now and again, I come back to looking at <a href="http://en.wikipedia.org/wiki/Device_driver">device drivers</a> and driver-writing, and I wonder why there is not some common interface for device drivers. What would the world be like if we could write a device driver for Linux, and be able to use it on FreeBSD without modification? There was a project called the <a href="http://www.projectudi.org/">Uniform Driver Interface</a>, which aimed to create a common specification (both <a href="http://en.wikipedia.org/wiki/API">API</a> and <a href="http://en.wikipedia.org/wiki/Application_binary_interface">ABI</a>) for drivers such that they could be used portably between operating systems. In other words, a device manufacturer could create a device (say, a <a href="http://en.wikipedia.org/wiki/SATA">SATA</a> chipset) once, and it could then be used by <a href="http://en.wikipedia.org/wiki/Linux">Linux</a>, <a href="http://en.wikipedia.org/wiki/FreeBSD">FreeBSD</a>, <a href="http://en.wikipedia.org/wiki/NetBSD">NetBSD</a>, <a href="http://en.wikipedia.org/wiki/OpenBSD">OpenBSD</a>, <a href="http://en.wikipedia.org/wiki/Haiku_(operating_system)">Haiku</a>, <a href="http://en.wikipedia.org/wiki/Microsoft_Windows">Windows</a>, <a href="http://en.wikipedia.org/wiki/Mac_OS_X">OS X</a>, or any other <a href="http://en.wikipedia.org/wiki/Operating_system">operating system</a> that chose to implement the UDI specification (or, honestly, <em>any</em> generic, OS-independent driver specification).</p>
<p>The <a href="http://en.wikipedia.org/en/Free_Software_Foundation">Free Software Foundation</a> <a href="http://www.gnu.org/philosophy/udi.html">objected to UDI</a> for various reasons. Mostly, I think, it was because they were afraid that people who are not them would choose to use drivers that were non-free. As I&#8217;ve written about before here, there are people who think that forcing people to use <a href="http://en.wikipedia.org/wiki/Free_software">free software</a> is somehow freedom—and I will not go into it in any great depth here, because I have done that in the past. Suffice it to say that forcing <em>anything</em> is not freedom; it cannot be freedom. So, the Free Software Foundation, I think, was really afraid that they would have to do more work to be able to stick to their own requirement of using 100% free software on their own computer systems. (And hey, Roy, if you&#8217;re reading—I&#8217;m not saying that the FSF is wrong, and I&#8217;m not putting myself in a position opposite of that of the FSF. I suspect you think so anyway, but hey, I just figured I would point that out.)</p>
<p>Even if the free software operating systems did not adopt the UDI specification, why didn&#8217;t proprietary operating systems? This is perhaps the most puzzling thing to me. It seems that in this event, <em>none</em> of the operating systems—free or proprietary—did what would have made sense. After all, even if <em>only</em> <a href="http://en.wikipedia.org/wiki/Apple_Inc.">Apple</a> and <a href="http://en.wikipedia.org/wiki/Microsoft_Corporation">Microsoft</a> adopted a common device driver specification, that would save a lot of time, effort, and improve user experience all the way around. Apple users would be able to use all the hardware that Microsoft users could use—and the inverse would also be true. The amount of time that device driver authors would have to spend writing and debugging driver code would go <em>way</em> down—free software driver authors would be able to write a driver <em>once</em>, for example, and all systems (including free software systems that chose to support the specification) would benefit.</p>
<p>I could see an objection of a driver specification that was binary-only. However, UDI was not—it mandated an ABI so that drivers that are built for a particular platform were binary-compatible with operating systems on the same platform, but it also mandated an API, so that drivers would be source compatible to <em>any</em> operating system that implemented the specification, on any platform. That by itself would seem to me to be positive motivation to hardware manufacturers to release the source code to drivers so that they can support operating systems that are on platforms that do not exist yet, or have not been considered (or have been considered to be nonviable or unsupported platforms).</p>
<p>So, I have to wonder why a common device driver specification was never implemented in various operating systems. It would seem to be a common sense thing, especially given that there are so many operating systems. It would make the coexistence of operating systems a lot easier, and it would promote choice. It might encourage bits of proprietary code on free software operating systems, but it would also enable people to drop the excuse that “free operating system <em>x</em> does not support device <em>y</em>”, and would as a result potentially increase the number of free software programs and operating systems in use, even if there is a minor cost in terms of certain drivers. And those drivers could always be replaced—a common driver specification would make it easier to understand the structure of drivers generally, and make it easier for lawful, clean-room reverse engineering to be done on those drivers.</p>
<p>Imagine, for example, if drivers for graphics cards, TV tuner cards, video and audio encoding/decoding cards, modems, storage chipsets, motherboard chipsets, <a href="http://en.wikipedia.org/wiki/USB">USB</a> chipsets, <a href="http://en.wikipedia.org/wiki/IEEE-1394">IEEE-1394</a> chipsets, graphics tablet devices, touch screens, debugging interfaces, network devices, and so forth were all written to a common specification, it would reduce the amount of code which needed testing. It would increase user choice in both hardware and operating systems—something which I still hold is quite likely the most valuable freedom we have. It would increase reliability, since the users of Windows, OS X, Linux, the various BSD systems, and other, not-so-mainstream operating systems would be able to run the same driver code and collectively supply debugging information and perform testing in a multitude of environments. It would increase security, because then common code that is well-known could be used on all platforms and not just the one it was written for. It would do for device drivers what <a href="http://en.wikipedia.org/wiki/POSIX">POSIX</a> has done for user-mode application software. I do not believe that I could be convinced that this would be anything other than a good thing.</p>
<p>Also, it could bring back old operating systems.  Imagine what life could be like, for example, if <a href="http://en.wikipedia.org/wiki/OS/2">OS/2</a> had a “UDI driver” written for it, and it could then take advantage of newer drivers never intended for it. Or any other very old operating system which is no longer supported and could still be useful, for any of a number of reasons…</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/03/03/the-uniform-driver-interface%e2%80%94why-wasnt-it-adopted/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Can you force freedom and it still be freedom?</title>
		<link>http://mike.trausch.us/blog/2010/01/19/can-you-force-freedom-and-it-still-be-freedom/</link>
		<comments>http://mike.trausch.us/blog/2010/01/19/can-you-force-freedom-and-it-still-be-freedom/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 05:12:57 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[FLOSS]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[GPLv3]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[wtf‽]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=581</guid>
		<description><![CDATA[So back on this topic again today.  I am going to take a look at a few different statements here in this post, and then I&#8217;m going to go over them and explain why these statements are or are not correct.  Should you wish to verify any of my information, you&#8217;re more than welcome to [...]]]></description>
			<content:encoded><![CDATA[<p>So back on this topic again today.  I am going to take a look at a few different statements here in this post, and then I&#8217;m going to go over them and explain why these statements are or are not correct.  Should you wish to verify any of my information, you&#8217;re more than welcome to do so—just make sure you actually know what you&#8217;re talking about before you call me “wrong” on this one, or I will absolutely ignore you.  I have other—and more important—things to do than put up with <a href="http://en.wikipedia.org/wiki/Troll_(internet)">trolls</a> who cannot do basic research (of course, this means that I expect that you know how to use <a href="http://www.google.com/">Google</a> and <a href="http://en.wikipedia.org/">Wikipedia</a> and will do so before writing your responses, but hey, I could be expecting too much).</p>
<h3>“You can have <a href="http://en.wikipedia.org/wiki/Freedom_(philosophy)">freedom</a> without <a href="http://en.wikipedia.org/wiki/Choice">choice</a>.”</h3>
<p>That someone could even come up with this one is just amazing to me. Note that this is not an exact quote, but it is the summary of Friday&#8217;s topic. For example, this summary comes from the idea that <a href="http://en.wikipedia.org/wiki/Canonical_Ltd.">Canonical</a> is bad for <a href="http://ubuntuforums.org/showthread.php?t=1381221">considering making mainstream non-free software available for Ubuntu based on user preferences</a>. It does not matter who came up with it, of course, but the important thing is that it be called what it is: patently absurd. The ability to choose is a major part of what freedom—or <a href="http://en.wikipedia.org/wiki/Liberty">liberty</a>—is. If you cannot make a choice on a matter, then by definition you do not have freedom in the context of that matter. It is quite simple and self-explanatory. Canonical is seeking to <em>increase</em> freedom here, not take it away. Some people actually <em>want</em> to use <a href="http://en.wikipedia.org/wiki/Proprietary_software">non-free software</a>; others may not want to use it, but aren&#8217;t aware of alternatives. The latter group of people should have our focus with regard to education (but then we should <em>let them make the choice for themselves</em>!).</p>
<p>Note that I am not one of these people: I would rather use <a href="http://en.wikipedia.org/wiki/Free_software">free software</a> because of the liberty it gives me that I have come to expect over the years. But I am <em>not</em> going to tell someone else that they are <em>harming</em> me because they would rather use non-free software that is familiar to them. All I can do is show them that there are free alternatives that exist. I cannot—and I will not—make them use it or make them feel bad for not using it. I may not like proprietary software for a variety of reasons, but I will defend people&#8217;s right to use it just as I will defend even a <a href="http://en.wikipedia.org/wiki/Stupidity">stupid</a> person&#8217;s right to spew nonsense by way of speech or written word. In other words, “<a href="http://en.wikiquote.org/wiki/Evelyn_Beatrice_Hall">I disapprove of what you say, but I will defend to the death your right to say it</a>,” or perhaps more appropriately, “I [may] disapprove of what [software you run], but I will defend to the death your right to [run] it.” Even I use a <a href="http://en.wikipedia.org/wiki/Fglrx">package</a> or <a href="http://en.wikipedia.org/wiki/NVIDIA#Documentation_and_drivers">two</a> that is proprietary in nature (though it is looking like I will not have to do so for much longer, given the efforts to replace these packages with equivalent free software).</p>
<p>It is worth it to note that by adding non-free software to <a href="http://www.ubuntu.com">Ubuntu</a>, the free software that is already there does not change. The mere existence of non-free software within its repositories does not make Ubuntu somehow bad or evil. It would add choices that do not currently exist, and that one such as myself or yourself can certainly opt out of—I most likely would, for the most part, as I do not need to depend on non-free application software, and I only use non-free drivers if I have hardware where anything else is nonviable (and only until there are functional free software drivers). Did you know that Ubuntu has <a href="https://lists.ubuntu.com/archives/gobuntu-devel/2008-April/000651.html">an option in the installer to only install free software</a>? Can you say that for your favorite desktop <a href="http://en.wikipedia.org/wiki/Operating_system">operating system</a> distribution, whatever that might be?</p>
<p>The response to this idea, then, is that without choice, there is very little—if any, really—freedom. The thing that gives us freedom with free software is that we are able to to download the source code, to review/audit it, to change it to fit our needs or fix a problem, and to share those changes. If we cannot do those things, then it is not free software; see the <a href="http://www.gnu.org/philosophy/free-sw.html">essential freedoms</a>. But non-free software inside a distribution is not something that should not cause you great consternation even if you are among the most dedicated of freedom advocates, for if you are a true advocate of <em>freedom</em> then by definition you <em>must</em> respect a computer user&#8217;s freedom of choice. Remember that we choose to run free software because of the benefits it brings to us; we choose to improve upon free software for much the same reason. Eventually, I think that free software will <a href="http://en.wikipedia.org/wiki/History_of_free_software">once again</a> become the norm for computer software, on <a href="http://en.wiktionary.org/wiki/merit">merit</a> alone, for no other reason than the development, release, and usage of free software is a highly practical solution for many things ranging from <a href="http://en.wikipedia.org/wiki/Library_(computing)">library code</a> to <a href="http://en.wikipedia.org/wiki/Application_software">application software</a> to complete operating systems. It is worth noting that <a href="http://en.wikipedia.org/wiki/Free_content">free content</a>—which is similar in concept to free software, which itself is merely a specific application of freedom itself—also appears to making major headway towards becoming mainstream; it is doing so more quickly than free software is, but there is every reason to believe that free software will follow, for it is already.</p>
<h4>An Example</h4>
<p>Imagine that you are in a store, because you need some milk for dinner some night. You always get 1 gallon of 2%. But, the store has stopped carrying it, because more people buy whole milk and they were throwing away the 2% milk—demand was low, supply got to be too high, so they just stopped carrying it altogether. You leave the store and head to the next in the same town and you find the same thing there. You have a choice of stores to go to, and you have made the choice to go buy yourself some milk. But there is only one type of milk. You no longer have the choice to buy 2% where you are, and so effectively, your freedom to buy it has been taken away. (Of course, <a href="http://www.thriftyfun.com/tf73187289.tip.html">you can make 2% milk</a> <a href="http://answers.yahoo.com/question/index?qid=20090809170811AAT0NO3">from whole milk</a> (and <a href="http://wiki.answers.com/Q/How_much_butter_added_to_skim_milk_will_make_whole_milk">make whole from 2% even</a>, or <a href="http://www.cookingforengineers.com/article/113/Making-Butter">even butter</a>), but I suspect just as many people want to do that as want to write their own free software that they <em>demand</em> simply must exist, but doesn&#8217;t yet).</p>
<p>Now, the point here is that there is more than one freedom in play: the freedom of the store to stock (or not stock) various products, which affects your freedom as a <a href="http://en.wikipedia.org/wiki/Consumer">consumer</a> to buy the product you want. In the case of software, and choice, if the software you are running gives you all the choices you want, <em>then it fits your needs</em>. If it does <em>not</em>, then you are not going to be able to use it the way you want. Now you have two choices: you can do the work that it would take to make your desired choice possible, or you can use another system (free or proprietary) that will give you the choice that you want. Many people will choose the latter, especially if they are non-programmers. Though I&#8217;ve seen programmers also choose to use proprietary systems for something that they could themselves implement. That is their choice, of course. After all, if you really wanted 2% milk, you would have the same choice: make it yourself, or drive to the next town over which might have it available for you (assuming that there is some in stock and that the stores neighboring towns have not also decided to stop stocking 2% milk).</p>
<h4>Ubuntu One: The Reason Behind This</h4>
<p>This discussion came up because someone on <a href="http://identi.ca">identi.ca</a> made the claim that Canonical is forcing proprietary software into Ubuntu by way of the <a href="http://en.wikipedia.org/wiki/Ubuntu_One">Ubuntu One</a> client software. I cannot even begin to state just how woefully incorrect this point of view is. First off: the <em>only</em> thing added to Ubuntu is the ability to connect to Ubuntu One, and the software that was added to Ubuntu do to that is licensed under Version 3 of the <a href="http://en.wikipedia.org/wiki/GPL"><strong>GNU General Public License</strong></a>. The claim made in response to that was that Ubuntu One is only <em>partly</em> free software, because the server is somewhere else and has not been released. As we shall soon see, that claim is nonsensical—it depends on an extremely naïve view of how software actually works in order to make sense, really.</p>
<p>So, first things first: Ubuntu One, which was added to Ubuntu 9.04, is <em>not</em> proprietary software. The proof rests in the fact that it GNU GPL v3.0, and we know <em>a priori</em> that software licensed under the GPL is free software, so we do not need to go further on that point.</p>
<p>Now, because the software in question added to Ubuntu is free software, we can read it. The essential freedoms granted to us by truly free software ensure this, and the GPLv3 is indeed a truly free software license because it grants those freedoms. Because we are able to study the software and see how it communicates with the server. Once we know how to communicate with the server, we can write that up and design a server that communicates exactly the same way. From there, it is just a matter of patching the sync dæmon that is in Ubuntu to talk to an arbitrary, Ubuntu One compatible server. To determine how to do that, one need only read the <a href="http://python.org/">Python</a> source code contained in the <code>python-ubuntuone-storageprotocol</code> and <code>python-ubuntuone-client</code> packages. If you do not know Python well, you might expect to spend several days doing that, but if it bothers you so tremendously that you are going to practically start a flame war over it, you may find it worth it to do so.</p>
<p>Of course, the other side to that is this: if you really want Ubuntu One to talk to an arbitrary server that runs free software, and you want that free software to be written, you can fund the effort to write the free software. Approach a proficient developer somewhere out there on the Internet and ask them how much they&#8217;d charge to write a server for Ubuntu One. You might not be able to afford the fund the project entirely, but if you get a number from someone, you can start a coordinated effort to raise the funds. If you are lucky enough to be able to fund the whole project, then do so: it is but one way that you can help provide something back to the community. This does not apply to just an implementation of the Ubuntu One protocol, it could apply to anything that you see that is missing and needs to be created. Or you could spend time learning what you need to learn to pick up the project yourself, if you care for the project that deeply. The most important attribute that a person can have in order to get started with development is motivation—<a href="http://jameswestby.net/weblog">James Westby</a> reminded me of this a couple of years ago, something which I had forgotten.</p>
<h4>Perceptions: Another (Possible) Reason</h4>
<p>It was suggested to me that another possible reason that people would object to having non-free software inside an operating system distribution such as Ubuntu is that they are afraid that the proprietary options have higher quality, or offer superior features, or provide functionality that is not offered by any existing free software. Thus, they have this perception that by adding such non-free software into a distribution like Ubuntu, people will automatically use and prefer it over free software. This simply is not the case. Sure, some people will use iTunes if it is available on Ubuntu. Maybe many people would. I <em>might</em> even do so, if it were legally available for me to use that way <em>and</em> if it supports the purchase of <a href="http://en.wikipedia.org/wiki/Digital_rights_management">DRM</a>-free music. However, if there were a free software client for the iTunes store, I&#8217;d much prefer to use that. To my knowledge, however, there is no such thing that exists.</p>
<p>If there is not a free software alternative for a non-free component inside a distribution of software, if you are offended by that, then by all means, <em>create a free software alternative for it</em>! As mentioned above, you can start on such a project&#8217;s development, or you can look for people that would be interested in volunteering for it and coordinating them, or you can put up funds to pay developers to implement it. If you have money, this can be the easy part: find someone who is willing to accept payment for the service of implementing the free software alternative for whatever it is that someone else has funded, wrote, and released as proprietary software. It is not like free software is developed without cost (and if you think that it is, then you seriously do not understand what free software is or anything about the world of free software and have no standing to be getting mad when a company spends money writing software and does not release it as free software. You can try to write companies that write such software and ask them if they will give you any form of written specifications for the software, or an interface definition, or something along those lines. The worst thing that could happen is that you will be told “no”. And do so <em>nicely</em>, or they&#8217;ll be more inclined to tell you “bugger off” instead of simply “no”.</p>
<h3>“Allowing users to choose proprietary software is anti-freedom.”</h3>
<p>Nothing could be farther from the truth; it is the same, in fact, as the above statement that one can have freedom without choice. For example, if Ubuntu adopts iTunes and makes it so that you can “sudo aptitude install itunes” in the future, that is <em><strong>not</strong></em> a bad thing! How <em>can</em> it be—It contributes to the ability to choose, and thereby <em>contributes to the freedom of the end-user</em>. If you are a die-hard free software supporter and do not want to run non-free software on your system, then there is a very simple solution for you: <em><strong>simply don&#8217;t install it</strong></em>.  That <strong>is</strong> a valid solution to the problem. There are tools already available that can be run as a <a href="http://en.wikipedia.org/wiki/Cron">cron job</a> and report on any non-free software that you might have accidentally (or even intentionally) installed. If you are worried about additional non-free software getting into Ubuntu, then help enhance those tools. Or write a <a href="http://en.wikipedia.org/wiki/GUI">GUI</a> <a href="http://en.wikipedia.org/wiki/Front_end">front-end</a> for something like the <a href="http://en.wikipedia.org/wiki/Vrms">virtual RMS</a> program and work to get that included into Ubuntu as well, perhaps something that can run every time you login to the computer, or that runs as a persistent process that watches the package database on your distribution of choice for updates and then checks to see if newly installed software is non-free and alerts the user. Of course, it&#8217;d be most effective as an opt-in system, and not an <a href="http://en.wikipedia.org/wiki/Opt-out">opt-out</a> one where it would just be annoying.</p>
<p>There is no way, then, that freedom is actually reduced in this way when another choice becomes available. If iTunes were to be included in the repositories (and I suspect it would be, <a href="http://www.ubuntu.com/community/ubuntustory/components">like the restricted, universe and multiverse repositories</a>, a separate opt-in repository; perhaps simply “proprietary” would be fitting), this does not reduce your ability to choose to run a free software media player and manager like <a href="http://banshee-project.org/">Banshee</a>, or <a href="http://projects.gnome.org/rhythmbox/">Rhythmbox</a>, or even <a href="http://amarok.kde.org/">AmaroK</a> if you are so inclined to run that KDE stuff.</p>
<p>Once upon a time, <a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt">FUD (fear, uncertainty, and doubt)</a> was the tool of Microsoft. We (the free software world) <em>completely</em> hated it when Microsoft would put out FUD, because we would then have to fight that FUD by way of explanation and demonstration. Well, some time ago, a subgroup of the free software world decided to start using FUD themselves—it was done with <a href="http://en.wikipedia.org/wiki/Mono_(software)">Mono</a>, and it is being done now with just a <em>survey</em> asking people what sort of software they would like to see in Ubuntu. Now, those of us who are left who are advocates of liberty—both personal and societal—are stuck potentially fighting <strong><em>two</em></strong> battles. One with Microsoft&#8217;s FUD—such as the constant notion that you have to pay for software—and one with the &#8220;free software evangelists&#8221; FUD, who have even gone so far as to say that people should not use certain types of free software (the one who calls himself “The Open Sourcer” <a href="http://www.theopensourcerer.com/tag/mono/">even still today tells people to remove certain truly free software from their systems</a>). The truth is somewhere in the middle, between these two ends of the spectrum.</p>
<h3>Conclusion</h3>
<p>Back to the point at hand: to say that giving a person a choice is a constraint on that person&#8217;s freedom, that is <a href="http://en.wikipedia.org/wiki/Doublespeak">doublespeak</a>.; it is saying that “slavery is freedom,” albeit to a lesser degree than that very melodramatic extreme—it simply does not make sense. The concept just does not make sense unless the words that are used to express the concept are dramatically redefined to mean things vastly different from what standard English dictionaries define them to be. The only reason that one has to try to convince someone that additional choice is a constraint on freedom is to try to convince people of things that are not true; to install fear, uncertainty, and doubt into people. This is the sort of behavior that—no matter <em><strong>what</strong></em> community it originates from—is completely immoral, unethical, and absolutely unacceptable. It&#8217;s dishonest, and for those of you who know me personally, you know what I think of dishonesty.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/01/19/can-you-force-freedom-and-it-still-be-freedom/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Unexpected downtime for trausch.us, mischiefinoverdrive.us.</title>
		<link>http://mike.trausch.us/blog/2009/10/26/unexpected-downtime-for-trausch-us-mischiefinoverdrive-us/</link>
		<comments>http://mike.trausch.us/blog/2009/10/26/unexpected-downtime-for-trausch-us-mischiefinoverdrive-us/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 14:17:31 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[computing]]></category>
		<category><![CDATA[site maintenance]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=573</guid>
		<description><![CDATA[So, this weekend was&#8230; interesting. Through something of a comedy of errors, the server suffered some strange software issues that prevented it from working this weekend.&#160; There was a bug in a recent update to the server software (running testing software)&#160;and that caused longer downtime than it should have due to various interactions between things [...]]]></description>
			<content:encoded><![CDATA[<p>So, this weekend was&#8230; interesting.</p>
<p>Through something of a comedy of errors, the server suffered some strange software issues that prevented it from working this weekend.&nbsp; There was a bug in a recent update to the server software (running testing software)&nbsp;and that caused longer downtime than it should have due to various interactions between things on the server.&nbsp; The good news is that this is mostly fixed.</p>
<p>Additionally, this downtime has taught me that there is yet still more to do in terms of getting the server able to stand back up on its own.&nbsp; I&#8217;ve simplified the server&#8217;s setup a bit, and I&nbsp;have to write some scripts and other little glue here and there to tie down some of the things I&#8217;m doing so that the server can do things like go down and come back up without issues, all by itself.&nbsp; Getting that done would be generally a good thing. &nbsp;First things first, I&nbsp;have to figure out a decently reliable way to shutdown the system without having to do something like kill the containers and not give them the chance to cleanly shut down.&nbsp; Ideally, there would be some sort of command that could be run on the system that would enable the containers to be shutdown.&nbsp; This is slightly challenging, because you cannot just chroot into the directory tree that the VMs are running in and kill processes, because things like /proc inside the container aren&#8217;t visible to tools running on the host.&nbsp; Oops.</p>
<p>So, I&nbsp;have some work left yet in terms of getting the server going the way it needs to be again.&nbsp; After that, I&#8217;ll be working on it over the next couple of weekends to try to increase its robustness, and so planned weekend downtime for *.trausch.us and www.mischiefinoverdrive.us can be expected.&nbsp; </p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2009/10/26/unexpected-downtime-for-trausch-us-mischiefinoverdrive-us/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When is it GNU/Linux and when is it not?</title>
		<link>http://mike.trausch.us/blog/2009/09/30/when-is-it-gnulinux-and-when-is-it-not/</link>
		<comments>http://mike.trausch.us/blog/2009/09/30/when-is-it-gnulinux-and-when-is-it-not/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 22:32:58 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=568</guid>
		<description><![CDATA[Of the many controversies in free software, this is one that I&#160;have long found to be interesting.&#160; People seem to define things in different ways, which leads to confusion (and arguing)&#160;when one person calls a system a &#34;GNU/Linux&#34; system and the next calls it just the &#34;Linux&#34; system.&#160; Too often, I&#160;have found people saying &#34;You [...]]]></description>
			<content:encoded><![CDATA[<p>Of the many controversies in free software, this is one that I&nbsp;have long found to be interesting.&nbsp; People seem to define things in different ways, which leads to confusion (and arguing)&nbsp;when one person calls a system a &quot;GNU/Linux&quot; system and the next calls it just the &quot;Linux&quot; system.&nbsp; Too often, I&nbsp;have found people saying &quot;You must <strong><em>always</em></strong> call it GNU/Linux, Linux is nothing without GNU!&quot; and this is simply incorrect.&nbsp; So, here I&nbsp;try to spell out the issues and when something is &quot;GNU/<em>anything</em>&quot; and when it is not.</p>
<h2>Question 1: What <em>is</em> an operating system?</h2>
<p>Here is a (very partial, heavy on the Unix-like systems) list of operating systems:&nbsp; GNU, FreeBSD, OpenBSD, NetBSD, Microsoft Windows, Mac OS, XENIX, AIX, OS/2, MS-DOS, PC-DOS, FreeDOS.&nbsp; All of these are full operating systems, though some are more compartmentalized than others.&nbsp; I&nbsp;hear some saying already, &quot;But GNU&nbsp;is not an operating system!&quot;&nbsp; Incorrect.&nbsp; When using the Hurd and a GNU&nbsp;userland operating system stack, that <em>is</em> the GNU&nbsp;system.&nbsp; I&nbsp;hear others saying, &quot;But you left Linux out!&quot;&nbsp; Correct, I did: Linux <em>is not an operating system by itself</em>.&nbsp; Many people are under the impression that the kernel <em>is</em> the operating system, and this is simply incorrect.&nbsp; <strong>A kernel is the core of an operating system, but it is not <em>the</em> operating system itself.</strong></p>
<p>If the kernel is not the operating system itself, what is?&nbsp; An operating system consists of a kernel and software that is used to make that kernel useful&mdash;software that provides the user (or the programmer) with an <em>interface</em> to the kernel.&nbsp; An operating system in the modern sense comprises a kernel and software that surrounds the kernel.&nbsp; In the case of POSIX, UNIX and UNIX-like operating systems, this includes the C library, a set of utilities (kill, ps, ls, cp, mv, rm, sh, and so forth), and more.&nbsp; To compare to Windows, the Windows operating system is <em>not</em> just NTOSKRNL.EXE.&nbsp; That&#8217;s the kernel, but there are a suite of executables and libraries that surround it and provide interfaces to it which make the kernel useful.&nbsp; While it is technically possible to do, law prevents the creation of a &quot;GNU/Windows&quot; or &quot;GNU/NTOS&quot;.&nbsp; It would not be as straightforward as it is to run GNU&nbsp;on a Unix-like system, but it would be possible (Cygwin is as close as it can lawfully get).</p>
<p>So, when we talk about the FreeBSD&nbsp;operating system, we are referring both to the FreeBSD&nbsp;kernel and the utilities and software that make it useful.&nbsp; &quot;FreeBSD&quot; includes  utilities and libraries and all of that, just like the NetBSD or Windows operating systems do.&nbsp; But, Linux does not.&nbsp; When we say &quot;Linux&quot;, we are <em>necessarily</em> talking about only a kernel, the project that is the brainchild of a man named Linus Torvalds and the army of programmers around him.</p>
<h2>Question 2: What is an OS&nbsp;kernel?</h2>
<p>An operating system kernel is the core of the operating system.&nbsp; However, without the rest of the components that build an operating system, a kernel is useless.&nbsp; To make matters more interesting, a single kernel can be used as a component in several different operating systems.&nbsp; This is actually the case for many systems, though it is most prominent in the case of systems that are built around the Linux kernel because there are so many of them.</p>
<p>The lifecycle of a kernel is generally something like this:&nbsp;&nbsp;Set up and initialize itself, load and initialize basic hardware drivers, kick off one (or more) processes that are required to make the system useful, and then loop, handling things like hardware interrupts and system calls from software.&nbsp; In the case of a Unix-like system, the kernel attempts to run a program called &quot;init&quot; (usually on modern systems, this is found in /sbin/init), which initializes userland and starts running services that make the system useful. &nbsp;So a Unix-like operating system provides at least a kernel and an init process, as well as programs for logging in from TTYs (or virtual terminals), manipulating files, processes, and the kernel&#8217;s state, and so forth.&nbsp; If a Unix-like system cannot find an init program, it will halt (panic)&nbsp;or return to firmware where a user could tell the kernel to use an alternate program for init (for example, you can pass &quot;init=/bin/bash&quot; to the Linux kernel, and it will start a single program:&nbsp;bash).</p>
<h2>Question 3: Where is the line between an OS&nbsp;and the rest?</h2>
<p>To answer this question, we must look at several operating systems, and we must be able to know what the difference is between <em>core</em> software and <em>application</em> software.&nbsp; The line can be blurred, of course, especially when the core software depends on certain application software.&nbsp; So in order to more accurately tell the difference, we need to know exactly what the core system uses.&nbsp; A classic example in the UNIX&nbsp;world: some software is used as system software, and is also available for use as application software.&nbsp; A system cannot be called a Unix without some of it, and a system certainly isn&#8217;t Unix-like without it (and remember:&nbsp;Unix is an operating system definition).</p>
<p>For non-technical people, an operating system is a distribution.&nbsp; That is, Microsoft Windows is an operating system as it is installed; Ubuntu, Debian, and Red Hat Enterprise Linux are also operating systems.&nbsp; For those who are more technical, though, the line isn&#8217;t there:&nbsp; the line is somewhere between what is shipped for installation and what is the core system.</p>
<p>Let&#8217;s compare FreeBSD&nbsp;with Linux.&nbsp; A typical FreeBSD system contains the FreeBSD&nbsp;kernel, FreeBSD&#8217;s C library, FreeBSD&#8217;s kernel management utilities, an implementation of init, and implementations of the Unix utilities (ls, ps, cp, kill, etc.).</p>
<p>However, a typical Linux system contains the Linux kernel, the Linux kernel utilities, the GNU&nbsp;C Library, GNU&nbsp;coreutils, GNU findutils, GNU&nbsp;bash, filesystem-specific utiltiies, an implementation of init (could be sysvinit, Upstart, or any number of other ones), and others.</p>
<h2>Question 4:&nbsp;When is it GNU/Linux? &nbsp;When is it not? &nbsp;When is any system GNU/<em>anything</em>?</h2>
<p>The simple answer:&nbsp;most systems <em>aren&#8217;t</em> GNU/<em>anything</em>, but they <em>could</em> be.&nbsp; Take as an example the project to use the FreeBSD kernel (but not the FreeBSD&nbsp;userland).&nbsp; The system <em>cannot</em> simply be called FreeBSD&nbsp;any longer:&nbsp;a significant portion of the FreeBSD operating system is removed when its userland is replaced.&nbsp; The project&#8217;s operating system is called &quot;GNU/kFreeBSD&quot;, not &quot;GNU/FreeBSD&quot; because FreeBSD was a complete operating system before its utilities were removed and GNU&nbsp;implementations dropped in.&nbsp; This would include the GNU&nbsp;C library and the typical things you see in a Linux installation.&nbsp; This also means that it&#8217;s a different operating system entirely!&nbsp; Any piece of software that expects to be built on FreeBSD and assumes a complete FreeBSD&nbsp;system might not even build when using the FreeBSD kernel and the GNU&nbsp;userland.</p>
<p>In the case of Linux:&nbsp; When you&#8217;re using the GNU&nbsp;utilities and core system, it&#8217;s GNU/Linux.&nbsp; When you&#8217;re <em>not</em>, then it&#8217;s not.&nbsp; For example, Android is a distinct operating system from Ubuntu.&nbsp; They both use the Linux kernel, but that&#8217;s where the similarities stop.&nbsp; Android is one example of a distinctly different operating system that shares a kernel with another operating system.&nbsp; Aside from the fact that Ubuntu is most commonly run on x86 or x86-64 systems and Android is most commonly run on ARM&nbsp;systems, if you sat the two side-by-side on the same platform you&#8217;d <em>still</em> have different operating systems that do things differently.&nbsp; This is because Android doesn&#8217;t even use the same C library as Ubuntu; many pieces of software that are stated to work on a Unix-like system such as GNU/Linux or FreeBSD assume a richer environment (closer to that specified by operating system standards).&nbsp; They would have to be <em>ported</em> to Android to run on Android successfully; that&#8217;s a major red flag that says &quot;Oh, that&#8217;s a different operating system.&quot;</p>
<h2>Question 5:&nbsp;Does that mean I&nbsp;can create my own operating system?</h2>
<p><strong><em>Yes</em></strong>.&nbsp; You can.&nbsp; And you can even re-use the kernel from any other operating system that is licensed in such as way as to permit you to do so.</p>
<p>Let&#8217;s think about this in terms of OS&nbsp;X&nbsp;and what Microsoft could potentially do for Windows, as an example.&nbsp; Apple used to have its own operating system called &quot;System&quot;, which was then called &quot;MacOS&quot;, and today we call it &quot;Mac OS&nbsp;Classic&quot;.&nbsp; This system was a cooperatively multitasking operating system that ran software specially built for it.&nbsp; It was very popular, and it was also not as robust as modern operating systems.&nbsp; It was pretty interesting, though:&nbsp;it did not have a command-line interface.&nbsp; Nearly everything that was in the <em>System Folder</em> was the operating system itself, aside from installed fonts, extensions, and system enablers (though often extensions and enablers would patch the operating system in memory, or hook into it in some way so as to attach itself to it).&nbsp; Apple abandoned that system years ago for OS&nbsp;X. &nbsp;They took a BSD&nbsp;kernel and wrote a stack around it, reusing some components but using a very different architecture to put things together.&nbsp; The kernel for OS&nbsp;X&nbsp;is called Darwin, and it&#8217;s a very important&mdash;in fact, the central&mdash;piece of the OS&nbsp;X operating system stack.&nbsp; But it is not OS&nbsp;X; it is but a component.</p>
<p>How could Microsoft do something like this?&nbsp;&nbsp;Let&#8217;s say that Microsoft went and did something similar, taking the BSD kernel and porting Windows&#8217; software stack to run around it.&nbsp; They also call it Windows.&nbsp; Let&#8217;s say that they modified the kernel to load Microsoft&#8217;s old drivers and that they had incorporated a PE&nbsp;loader and ported their software to this new operating system (but retained API and binary compatibility with their legacy operating system that used a very different composition of kernel and userland, by necessity).&nbsp; Would this mean that they were running FreeBSD?&nbsp;&nbsp;No.&nbsp; It <em>would</em> mean that their operating system were based on (at the very least)&nbsp;the FreeBSD&nbsp;kernel.&nbsp; Though they could keep the FreeBSD stack and package it as a set of extensions to their new operating system, and claim the ability to run FreeBSD&nbsp;(and in a limited fashion, some Linux, if they retain the Linux compatibility mode of the FreeBSD&nbsp;kernel and system)&nbsp;software.&nbsp; Now that would be an interesting market position for Microsoft to be in, wouldn&#8217;t it?&nbsp; Microsoft could even make their new system compliant in some way with POSIX&nbsp;and the SUS and get branded as a UNIX&reg; system.&nbsp; But the new system would be more like Windows than it would be FreeBSD if they didn&#8217;t keep FreeBSD&nbsp;as-it-were, since they&#8217;d likely replace the core stack to fit their desires and needs, like Apple did.</p>
<h2>Conclusion</h2>
<p>I hope that this has clarified things a bit.&nbsp; However, if it has not, a good place to start reading is the Wikipedia articles for <a href="http://en.wikipedia.org/wiki/Operating_system">&quot;operating system&quot;</a> and <a href="http://en.wikipedia.org/wiki/Kernel_%28computer_science%29">&quot;Kernel (computer science)&quot;</a>.&nbsp; They are a long articles, but they make for a great starting point for research and clarification of just what an operating system is.&nbsp; Both articles look at different operating systems (and their kernels).&nbsp; As to whether or not you can determine what an operating system is, you will want to become intimately familiar with <em>many</em> different operating systems (and types of operating systems; there are families of them as people create more and more systems both original and reimplementations of others) before you start trying to figure it out.&nbsp; Look at native code and managed code operating systems&mdash;also realize that the distinction of what is the operating system can sometimes be relatively hard to determine accurately.</p>
<p>If you want to see what a bare operating system looks like, though, check out one of these operating systems&#8217; source code:&nbsp;&nbsp;FreeBSD, NetBSD, OpenBSD.&nbsp; Each of them in their version control systems has the <em>complete operating system</em>, which is much more than just a kernel. &nbsp;You can then, should you want, figure out exactly what packages on a typical GNU/Linux system take the place of the remainder of the operating system.&nbsp; It&#8217;d be an interesting exercise in learning&mdash;if learning is truly what you&#8217;re after, and not just argument.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2009/09/30/when-is-it-gnulinux-and-when-is-it-not/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>On communicating with software authors</title>
		<link>http://mike.trausch.us/blog/2009/09/09/on-communicating-with-software-authors/</link>
		<comments>http://mike.trausch.us/blog/2009/09/09/on-communicating-with-software-authors/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 02:09:11 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[AllTray]]></category>
		<category><![CDATA[FLOSS]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=559</guid>
		<description><![CDATA[AllTray is a rather small project&#8212;for the moment, there is a single developer working on it (myself), and there aren&#8217;t a terribly great number of users, though the users that it does have are most excellent.&#160; For a long time, the users didn&#8217;t have the ability to observe the development processes for AllTray, nor did [...]]]></description>
			<content:encoded><![CDATA[<p>AllTray is a rather small project&mdash;for the moment, there is a single developer working on it (myself), and there aren&#8217;t a terribly great number of users, though the users that it does have are most excellent.&nbsp; For a long time, the users didn&#8217;t have the ability to observe the development processes for AllTray, nor did they have a bug tracker or any point of contact to the author/maintainer other than email.&nbsp; Things have gotten better there, since AllTray development takes place in the open on Launchpad (though I&nbsp;do have to get better about publishing feature branches that last longer than a day or two so that people can see them as well while they are in progress).</p>
<p>Many projects that are all about being open and transparent provide mechanisms for their users to get in touch with the developers.&nbsp; Launchpad has become an excellent place to do these things; Launchpad&#8217;s Answers and Bugs components are <em>truly excellent</em> ways to get in touch with people that manage software there.&nbsp; The system is so good that I&#8217;d advocate that every project try to move to it.&nbsp; Launchpad <em>does</em> have its issues, though they are often quickly fixed (and can be fixed even quicker now that it is free software).&nbsp; But between Bazaar (a truly amazing and flexible distributed version control system) for code hosting and the other components of Launchpad such as the Answers, Bugs, and Translations components, Launchpad provides virtually everything that a project needs to communicate effectively with its users aside from the project&#8217;s Web site.&nbsp; And users seem to naturally be able to reach out using it.</p>
<p>In the nearly one year that I&#8217;ve been working with AllTray, I&#8217;ve talked&mdash;well, written to&mdash;several people who have asked questions and acted in their own ways to work to improve the software.&nbsp; Development on AllTray has been made much easier just because people are willing to speak up.&nbsp; Everything from the random &ldquo;thank you&rdquo; to &ldquo;hey, are you going to do this?&rdquo; or &ldquo;I&#8217;d like to see feature <em>x</em> in the new version&rdquo; or whatever.&nbsp; It&#8217;s truly great.&nbsp; I can&#8217;t say that every project has users quite like AllTray&#8217;s, because AllTray is something of a niche application, but AllTray&#8217;s users are a great model for other projects.&nbsp; There has been virtually no negativity from users and everything has been constructive.</p>
<p>To anyone who manages a project that <em>doesn&#8217;t</em> use Launchpad, I&#8217;d <strong>strongly</strong> encourage them to do so.&nbsp; Its users are great, and as far as management of the overall project goes, it&#8217;s <em>very</em> easy for project people to communicate back and manage communications in a single spot.&nbsp; It&#8217;s also great that users can ask a question and that the project can do things like go, &ldquo;oh, hey, this is really a bug,&rdquo; or vice versa with bugs&rarr;questions.&nbsp; And if you don&#8217;t use Launchpad because you don&#8217;t want to use Bazaar&nbsp;(I&nbsp;hear that users of git are pretty dedicated to it; I&nbsp;can understand that, but it&#8217;s just not for me&mdash;it&#8217;s too complex, and I&nbsp;like that Bazaar just stays out of my way), consider using LP&nbsp;for everything <em>but</em> code hosting.&nbsp; Or consider using Launchpad&#8217;s code hosting to mirror your project from git, it does this quite nicely.&nbsp; Or, find some way to do what Launchpad does wherever you do project management.&nbsp; It works really well, and it&#8217;s a big help.</p>
<p>And to AllTray&#8217;s users. A big <span style="font-size: x-large;">Thank You</span>.&nbsp; You guys and gals are great.&nbsp; Keep communicating!</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2009/09/09/on-communicating-with-software-authors/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

