the best of my knowledge, the rEFInd code doesn't rely on anything
Linux-specific in its build requirements, and GNU-EFI's Sourceforge page
indicates that it works under Windows and OS X, too; however, my one
-attempt to compile GNU-EFI under OS X failed. Using the TianoCore toolkit
-might be more likely to work under OS X or Windows, but I haven't tested
-it. Under Windows, you would need to either create a project or Makefile
-for your non-GCC compiler or use a GCC port, such as MinGW
-(http://www.mingw.org). You'd probably need to adjust the Makefiles in the
-latter case.
+attempt to compile GNU-EFI under OS X failed. I've received one report that
+rEFInd compiles successfully with Clang and the TianoCore toolkit under OS
+X by adding the refind.inf file to a .dsc file that you use for your own
+projects, but I don't have more details than this. Under Windows, you would
+need to either create a project or Makefile for your non-GCC compiler or
+use a GCC port, such as MinGW (http://www.mingw.org). You'd probably need
+to adjust the Makefiles in the latter case.
Preparing Your Development Kit
1) Download UDK2010.SR1 from
https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010.
+ (Note that UDK2010.SR1.UP1 was released in June of 2012. I have yet to
+ test with it.)
2) Type "mkdir /usr/local/UDK2010". You can use another directory, but the
Makefile for rEFInd's EFI drivers assumes this location. You'll need to
EFILIB_DIR=EfiLib
# Build rEFInd, including libeg
-all: tiano
+all: gnuefi
gnuefi:
make -C $(LIBEG_DIR)
-0.4.5 (?/??/2012):
+0.4.5 (8/12/2012):
------------------
- Fixed bug that caused a failure to boot BIOS-based OSes on Macs.
+- Fixed bug in install.sh that caused it to fail to detect rEFItBlesser.
+
0.4.4 (6/23/2012):
------------------
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>\r
\r
<p>Originally written: 3/14/2012; last Web page update:\r
-6/23/2012, referencing rEFInd 0.4.4</p>\r
+8/12/2012, referencing rEFInd 0.4.5</p>\r
\r
\r
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>\r
<p class="subhead">by Roderick W. Smith, <a
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
-<p>Originally written: 3/14/2012; last Web page update: 6/23/2012,
-referencing rEFInd 0.4.4</p>
+<p>Originally written: 3/14/2012; last Web page update:
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 4/19/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
<li><b>ReiserFS</b>—This driver originated with rEFIt. It's useful
for reading Linux kernels from a separate <tt>/boot</tt> partition, or
- even from a root (<tt>/</tt>) filesystem, if you use ReiserFS on
- it.</li>
+ even from a root (<tt>/</tt>) filesystem, if you use ReiserFS on it.
+ <b>Caution:</b> If you use this driver, you should use the
+ <tt>notail</tt> option in Linux's <tt>/etc/fstab</tt> file for the
+ partition(s) you want the EFI to read. This is because the driver
+ doesn't properly handle ReiserFS's "tail-packing" feature, so files can
+ seem to be corrupted in EFI if you use this feature, which is disabled
+ by <tt>notail</tt>.</li>
<li><b>Ext2fs</b>—This driver also originated with rEFIt. It can be
used in the same way as the ReiserFS driver. Although it's called an
<li><b>HFS+</b>—Oracle seems to have written this driver, apparently
with some code taken from open source Apple examples. It was then
further modified by the Clover authors. I expect this driver to have
- limited appeal most rEFInd users. Macs don't need it, since Apple's EFI
+ limited appeal to most rEFInd users. Macs don't need it, since Apple's EFI
implementation provides its own HFS+ driver, and HFS+ isn't normally
used on UEFI-based PCs. Some CDs are mastered with both ISO-9660 and
HFS+, or even with HFS+ alone, and it's conceivable that an HFS+ driver
<p>I've tested several of the drivers described on this page on a handful of systems. The ext2fs driver (from any source) works on both ext2fs and ext3fs, but not on ext4fs—at least, not in my one test. (There may be options you can use when creating an ext4 filesystem that would enable the ext2fs driver to handle it, but if so I don't know what they are.) The ReiserFS driver is obviously useful only on ReiserFS partitions. (Reiser4 is not supported, as far as I know.) Given that these filesystems are getting a bit on in age by Linux standards, you might do well to use them on a separate Linux <tt>/boot</tt> partition; however, if you're willing to use ext3fs or ReiserFS on your root (<tt>/</tt>) filesystem, you can use the EFI drivers to read your kernel from it. Note that this assumes you use conventional partitions; to the best of my knowledge, there's no EFI driver for Linux's Logical Volume Manager (LVM) or Redundant Array of Independent Disks (RAID) configurations, so the EFI can't access filesystems stored in these ways.</p>
-<p>The ext2fs and ReiserFS drivers work, but they are a bit sluggish—particularly the ext2fs driver. The extent of the problem depends on the computer. In my tests so far, VirtualBox has fared the worst. On it, loading a Linux kernel with EFI stub loader from a FAT partition takes 2 seconds, from the moment of selecting the OS in rEFInd to the moment the kernel messages begin to appear. The equivalent time using ReiserFS or HFS+ is 20 seconds, and with ext2fs it's 200 seconds (that is, 3 minutes and 20 seconds). On a 32-bit Mac Mini, though, the speed problem is much less pronounced—my kernel loads in just 3 seconds from a ReiserFS partition and in 13 seconds from an ext2 filesystem. Times with ext2fs on a UEFI PC with an Intel motherboard are in the 2–4 second range. Nonetheless, if you try the ext2fs driver and it seems to hang, be patient; it may finally boot up. If so, and if the delay is too great for you to accept, you might consider using ReiserFS instead of ext2fs or ext3fs, at least if a change is practical. (For a <tt>/boot</tt> partition, it almost certainly is practical; you can back it up quite easily, create a fresh filesystem on it, and restore it. You may need to adjust your <tt>/etc/fstab</tt> entry for a new UUID value, though.) You can even use HFS+ on a Linux <tt>/boot</tt> partition, although this makes the most sense on a Mac, which has its own EFI HFS+ driver.</p>
+<p>The ext2fs and ReiserFS drivers work, but they are a bit sluggish—particularly the ext2fs driver. The extent of the problem depends on the computer. In my tests so far, VirtualBox has fared the worst. On it, loading a Linux kernel with EFI stub loader from a FAT partition takes 2 seconds, from the moment of selecting the OS in rEFInd to the moment the kernel messages begin to appear. The equivalent time using ReiserFS or HFS+ is 20 seconds, and with ext2fs it's 200 seconds (that is, 3 minutes and 20 seconds). On a 32-bit Mac Mini, though, the speed problem is much less pronounced—my kernel loads in just 3 seconds from a ReiserFS partition and in 13 seconds from an ext2 filesystem. Speeds were similar with my newest computer, an ASUS P8H77-I board. Times with ext2fs on a UEFI PC with an Intel motherboard are in the 2–4 second range. If you try the ext2fs driver and it seems to hang, be patient; it may finally boot up. If so, and if the delay is too great for you to accept, you might consider using ReiserFS instead of ext2fs or ext3fs, at least if a change is practical. (For a <tt>/boot</tt> partition, it almost certainly is practical; you can back it up quite easily, create a fresh filesystem on it, and restore it. You may need to adjust your <tt>/etc/fstab</tt> entry for a new UUID value, though. As noted earlier, be sure to use <tt>notail</tt> as an option in <tt>/etc/fstab</tt> for ReiserFS if you want to read it from EFI.) You can even use HFS+ on a Linux <tt>/boot</tt> partition, although this makes the most sense on a Mac, which has its own EFI HFS+ driver.</p>
-<p>Since the ext2fs and ReiserFS drivers share a common origin, it should come as no surprise that they perform in much the same way no matter which version (rEFIt, Clover, or rEFInd) you use. One exception is that the Clover EFI Tools drivers don't deliver filesystem labels, which makes them less desirable than the rEFIt or rEFInd drivers. The NTFS driver from the Clover Tools package is nice and speedy, though, so if for some reason you need to place a boot loader on an NTFS volume, this driver might be worth tracking down.</p>
+<p>Since the ext2fs and ReiserFS drivers share a common origin, it should come as no surprise that they perform in much the same way no matter which version (rEFIt, Clover, or rEFInd) you use. The NTFS driver from the Clover Tools package is nice and speedy, so if for some reason you need to place a boot loader on an NTFS volume, this driver might be worth tracking down.</p>
<p>Although both ext2fs and ReiserFS are case-sensitive, these drivers treat them in a case-insensitive way. Symbolic links work, which opens up possibilities for configuration, such as using a single kernel binary for multiple Linux distributions, with a link in one subdirectory pointing to a file in another directory. (If you try this, though, be sure to use <i>relative</i> links, as in <tt>../otherdist/bzImage.efi</tt>, at least if the partition is not Linux's root filesystem.)</p>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/14/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/14/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
<ul>
-<li><b><a href="http://sourceforge.net/projects/refind/files/0.4.4/refind-src-0.4.4.zip/download">A
+<li><b><a href="http://sourceforge.net/projects/refind/files/0.4.5/refind-src-0.4.5.zip/download">A
source code zip file</a></b>—This is useful if you want to
compile the software locally. Note that I use Linux with the <a
href="http://sourceforge.net/projects/gnu-efi">GNU-EFI</a> development
possible, but I've not attempted it.</li>
<li><b><a
- href="http://sourceforge.net/projects/refind/files/0.4.4/refind-bin-0.4.4.zip/download">A
+ href="http://sourceforge.net/projects/refind/files/0.4.5/refind-bin-0.4.5.zip/download">A
binary zip file (built with GNU-EFI)</a></b>—Download this if you
want to install rEFInd and/or its filesystem drivers on an <i>x</i>86
or <i>x</i>86-64 computer and have no need to test rEFInd first by
rEFInd</a> page.</li>
<li><b><a
- href="http://sourceforge.net/projects/refind/files/0.4.4/refind-bin-tiano-0.4.4.zip/download">A
+ href="http://sourceforge.net/projects/refind/files/0.4.5/refind-bin-tiano-0.4.5.zip/download">A
binary zip file (built with TianoCore EDK2)</a></b>—This package
is just like the preceding one, except that it was built using the
TianoCore EFI Development Kit 2 (EDK2) rather than the GNU-EFI that was
feedback about the TianoCore EDK2 build.</li>
<li><b><a
- href="http://sourceforge.net/projects/refind/files/0.4.4/refind-cd-0.4.4.zip/download">A
+ href="http://sourceforge.net/projects/refind/files/0.4.5/refind-cd-0.4.5.zip/download">A
CD-R image file</a></b>—This download contains the same files as
the GNU-EFI zip file, but you can burn it to a CD-R to test rEFInd (and its
filesystem drivers) without installing it first. (It boots on UEFI PCs,
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/14/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
<p>I decided to fork the earlier rEFIt project because, although rEFIt is a useful program, it's got several important limitations, such as poor control over the boot loader detection process and an ability to display at most a handful of boot loader entries on its main screen. I fixed a few of these bugs and released a patched version <a href="http://www.rodsbooks.com/efi-bootloaders/refit.html">here;</a> however, rEFIt's author, Christoph Pfisterer, didn't respond to my e-mails, and the latest official version of rEFIt, 0.14, was released in March of 2010. Thus, it appears that rEFIt has been abandoned. Forking the project to give rEFIt new features seemed like the thing to do.</p>
-<p>The <a href="http://refit.sourceforge.net">rEFIt Web page</a> has a distinct Mac bias, and the provided binaries work only on Macs because they're 32-/64-bit "fat" binaries, which Macs can handle but UEFI-based PCs can't. rEFIt can be recompiled to work on UEFI-based PCs, but prebuilt binaries for such systems are relatively rare. Although I do own a Mac Mini, my interest lies more on the side of standard PC hardware, and hence with UEFI. My development platform is Linux, and my installation instructions and binaries are much more platform-neutral. I'm aware that many Mac users will consider this a step backward, but I ask their indulgence; I only have so many hours a day to work on this project, and I prefer to devote my efforts to improvements that will benefit all rEFInd users, at least initially.</p>
+<p>The <a href="http://refit.sourceforge.net">rEFIt Web page</a> has a distinct Mac bias, and the provided binaries work only on Macs because they're 32-/64-bit "fat" binaries, which Macs can handle but UEFI-based PCs can't. rEFIt can be recompiled to work on UEFI-based PCs, but prebuilt binaries for such systems are relatively rare. Although I do own a Mac Mini, my interest lies more on the side of standard PC hardware, and hence with UEFI. My development platform is Linux, and my installation instructions and binaries are much more platform-neutral. I'm aware that many Mac users will consider this a step backward, but I ask their indulgence; I only have so many hours a week to work on this project, and I prefer to devote my efforts to improvements that will benefit all rEFInd users, at least initially.</p>
<p>As already noted, rEFInd is a boot manager for EFI and UEFI computers. (I use "EFI" to refer to either version unless the distinction is important.) You're likely to benefit from it on computers that boot multiple OSes, such as two or more of Linux, Mac OS X, and Windows. You will <i>not</i> find rEFInd useful on older BIOS-based computers. Prior to mid-2011, few computers outside of Intel-based Macs used EFI; but starting in 2011, computer manufacturers began adopting UEFI in droves, so most computers bought since then use EFI. Even so, many modern PCs support both EFI-style booting and BIOS-style booting, the latter via a BIOS compatibility mode that's known as the <i>Compatibility Support Module (CSM).</i> Thus, you may be using BIOS-style booting on an EFI-based computer. If you're unsure which boot method your computer uses, check the first of the below subsections.</p>
-<p>Subsequent sections of this document are on separate pages:</p>
+<p>Subsequent sections of this document are on separate pages. Be aware that you probably don't need to read them all; just skip to the sections that interest you:</p>
<ul>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/14/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/19/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
<p class="subhead">by Roderick W. Smith, <a
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
-<p>Last Web page update: 6/23/2012</p>
+<p>Last Web page update: 8/12/2012</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
<ul>
+<li><b>0.4.5 (8/12/2012)</b>—This version fixes a couple of Mac-related bugs. The most important is that version 0.4.3 and 0.4.4 couldn't boot BIOS-based (aka CSM or Boot Camp) OS installations; 0.4.5 restores this important feature. The second bug is in the <tt>install.sh</tt> script, which would often fail to detect rEFItBlesser, thus leaving it enabled and causing rEFInd to fail to start after the first reboot into OS X.</li>
+
<li><b>0.4.4 (6/23/2012)</b>—This is a bug-fix release. Most importantly, it fixes a bug in the new <tt>use_graphics_for</tt> feature; in 0.4.3, the options were set incorrectly (they just happened to work as expected on my main test configuration). I've also fixed problems with volume names in the 32-bit versions of both the drivers and the TianoCore EDK2 build of rEFInd itself. Finally, I've tweaked the <tt>install.sh</tt> script to do a better job of identifying the computer's ESP under OS X.</li>
<li><b>0.4.3 (6/21/2012)</b>—The major user-visible change to this version is the addition of the <tt>use_graphics_for</tt> option, which enables you to specify the OSes that rEFInd launches in graphics mode vs. text mode. This effect is tiny on most systems, but can be important on some, as noted on the <a href="configfile.html">"Configuring the Boot Manager"</a> page. There's also a change to the way graphics-mode boots are handled, to make for a slightly smoother visual transition. This version also fixes the incompatibility between the drivers and the firmware used by Macs (and probably other EFI 1.x systems). I've removed <tt>linux.conf</tt> as a valid alternative name for the <tt>refind_linux.conf</tt> file, so if you're still using the old name, now is the time to rename it! The biggest change is behind the scenes, though: I've added support for compiling rEFInd using the TianoCore EDK2, as well as the GNU-EFI toolkit that I've used up to this point. I have no intention of removing GNU-EFI support, but there's a chance that the TianoCore toolkit will help in implementing some future features or in debugging some problems. You can download either version from the <a href="http://www.rodsbooks.com/refind/getting.html">downloads page.</a></li>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 4/19/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
<p>I used icons from the Oxygen Icons project, both from the <a href="http://deviantdark.deviantart.com/art/Oxygen-Refit-70199755">Oxygen Refit</a> package and from Gentoo's <tt>oxygen-icons</tt> package. These icons supplemented or replaced icons that rEFIt used; however, many OS icons (such as those for Windows and Mac OS) are carried over from rEFIt. I've also used a handful of icons for individual Linux distributions from other sources—usually documentation associated with the distribution in question.</p>
-<p>In addition to this default icon set, I've received word of one other rEFInd theme:</p>
+<p>In addition to this default icon set, I've received word of two other rEFInd themes:</p>
<ul>
<li><a href="http://ecto-plazm.deviantart.com/art/rEFInd-Icon-Theme-296571397">ecto-plazm's theme</a></li>
+<li><a href="http://opendesktop.org/content/show.php?content=153267">The Gris Theme</a> (also available as an <a href="https://aur.archlinux.org/packages.php?ID=61917">Arch Linux package</a>.)</li>
+
</ul>
<p>If you've created or discovered another rEFInd theme, please <a href="mailto:rodsmith@rodsbooks.com">tell me about it</a> so that I can provide a link to it from this page.</p>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/14/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
<p>Originally written: 3/14/2012; last Web page update:
-6/23/2012, referencing rEFInd 0.4.4</p>
+8/12/2012, referencing rEFInd 0.4.5</p>
<p>I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!</p>
#
# Revision history:
#
+# 0.4.5 -- Fixed check for rEFItBlesser in OS X
# 0.4.2 -- Added notice about BIOS-based OSes & made NVRAM changes in Linux smarter
# 0.4.1 -- Added check for rEFItBlesser in OS X
# 0.3.3.1 -- Fixed OS X 10.7 bug; also works as make target
if [[ $? != 0 ]] ; then
Problems=1
fi
- if [[ -f /Library/StartupItems/rEFItBlesser ]] ; then
+ if [[ -f /Library/StartupItems/rEFItBlesser || -d /Library/StartupItems/rEFItBlesser ]] ; then
echo
- echo "/Library/StartupItems/rEFItBlesser file found!"
+ echo "/Library/StartupItems/rEFItBlesser found!"
echo "This program is part of rEFIt, and will cause rEFInd to fail to work after"
echo -n "its first boot. Do you want to remove rEFItBlesser (Y/N)? "
read YesNo
if [[ $YesNo == "Y" || $YesNo == "y" ]] ; then
echo "Deleting /Library/StartupItems/rEFItBlesser..."
- rm /Library/StartupItems/rEFItBlesser
+ rm -r /Library/StartupItems/rEFItBlesser
else
echo "Not deleting rEFItBlesser."
fi
if (AboutMenu.EntryCount == 0) {
AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
- AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.4.4.1");
+ AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.4.5");
AddMenuInfoLine(&AboutMenu, L"");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012 Roderick W. Smith");