1.	OK, I have downloaded this stuff.  What do I do now?

	A.	First, install the Steel City Comic font from
		fonts/steel-city-comic.regular.ttf. On most modern
		Linux systems, this can be done easily from your
		desktop environment, or by copying the file to the
		~/.local/share/fonts directory. You may need to run
		"fc-cache" to rebuild your font cache.

		Type "make" from the top-level directory.  If all goes
		well, this will produce a file named "perfbook.pdf",
		which prints two virtual pages per physical page.

		See FAQ-BUILD.txt for other Q's and A's related to
		build issues.

2.	Why the heck did you use this strange-looking text-based
	ca. 1980s typesetting package instead of something more
	modern, like OpenOffice?

	A.	Although latex takes a bit of getting used to, its
		automatic handling of bibliographies, tables of contents,
		figures, and tables is extremely useful for large documents.
		In addition, its text-based nature is much more compatible
		with modern source-code-control systems such as "git".

		Finally, the more-modern WYSIWYG text formatters tend
		to get a bit cranky when working with hundreds-of-pages
		documents.

3.	Where can I purchase a hardcopy of this book?

	A.	You can use any of a number of web-based printing
		services, for but one example, lulu.com.  Images suitable
		for cover art may be found in CoverFront.jpg and
		CoverBack.jpg in the cartoons directory.

		In addition, edition-level releases will be made more
		readily available in printed form.

4.	This book doesn't mention my favorite parallel-programming
	tools, languages, and algorithms.  Plus its Makefile and
	Latex formatting are imperfect.  What is up with that?

	A.	Please see the following question.

5.	Can I contribute?

	A.	Of course!!!  The contribution process is similar to that
		of the Linux kernel and of the Samba project.  See the
		Documentation/SubmittingPatches file in a Linux source tree.
		The email list for discussion and review is
		perfbook@vger.kernel.org.

		Please put a "Signed-off-by:" line in your patches,
		for an example see: http://lkml.org/lkml/2007/1/15/219.

		This "Signed-off-by:" line has a very specific meaning as
		follows:

		---------------------------------------------------------

		By making a contribution to this project, I certify that:

		1.	The contribution was created in whole or in part
			by me and I have the right to submit it under
			the open source license indicated in the file; or

		2.	The contribution is based upon previous work
			that, to the best of my knowledge, is covered
			under an appropriate open source License and I
			have the right under that license to submit that
			work with modifications, whether created in whole
			or in part by me, under the same open source
			license (unless I am permitted to submit under
			a different license), as indicated in the file; or

		3.	The contribution was provided directly to me by
			some other person who certified (1), (2) or (3)
			and I have not modified it.

		4.	I understand and agree that this project and the
			contribution are public and that a record of the
			contribution (including all personal information
			I submit with it, including my sign-off) is
			maintained indefinitely and may be redistributed
			consistent with this project or the open source
			license(s) involved.

		---------------------------------------------------------

		This is similar to the DCO used for the Linux kernel,
		with the addition of #4.  This says that you wrote
		the contribution yourself, as opposed to having (say)
		copied it from somewhere.  If multiple people authored
		a contribution, each should have a "Signed-off-by:" line.

6.	May I have permission to translate this book to my native
	language?

	A.	Of course!  In any case, this permission is implicitly
		granted by the choice of the Creative Commons
		Attribution-Share Alike 3.0 United States license for
		the text and GPL for the code.

		Please keep in mind that all translations must preserve
		the licenses.

		A project translating the book to Chinese is well underway,
		and there are rumors of other translation efforts as well.

		People who have worked on the Chinese translations
		include: 谢宝友(xie.baoyou172958@zte.com.cn,scxby@163.com),
		鲁阳(luyang.co@gmail.com), 陈渝(wilbur512@gmail.com),
		Cheedoong Drung (cn-boy@china.com.cn), and 王贺涛
		<wanghetaop@163.com>.  Please contact them to contribute
		to their good work.

		See http://code.taobao.org/p/perfbook/src/ for more
		information on Cheedoong Drung's and 王贺涛's effort.
		For a PDF of the translation by 谢宝友, 鲁阳, and 陈渝,
		please see:

		http://kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook-cn.2011.10.18a.pdf

		Motohiro Kanda has started work on a Japanese translation:

		https://sites.google.com/site/kandamotohiro/perfbook

		SeongJae Park has started work on a Korean translation:

		https://github.com/sjp38/perfbook-ko_KR

7.	I am working on a translation.  What do I need to do to get my
	name of the list in #6 above?

	A.	Send me at least one chapter of your translated work
		in machine-readable form, preferable PDF.

8.	May I please have permission to sell hardcopies of my translated
	version of this book?

	A.	Yes, in fact, you already have permission, thanks to the
		Creative Commons and GPL licenses in use.  I do request
		that you send me one copy of the translated work
		(hardcopy if available), but that is a request made
		from professional courtesy, and is not in any way a
		requirement for the permission that you already have
		under the Creative Commons and GPL licenses.

9.	I hate Quick Quizzes!!!  Could you please get rid of them?

	A.	Quite a few people like them a lot, so they will be
		staying.  However, you can easily produce a copy of the
		book that omits the Quick Quizzes by editing the Makefile
		and qqz.sty files in the top-level directory.

		One approach is to make the "\QuickQuiz" command in
		qqz.sty be a no-op and to add line to the Makefile that
		transforms "perfbook_flat.tex" by removing the Quick
		Quizzes, each of which starts with the line "\QuickQuiz{}"
		and ends with the line "} \QuickQuizEnd".

		This transformation should happen after the invocation
		of "utilities/extractqqz.sh" in the "perfbook_flat.tex"
		Makefile rule.	This would remove the inlined Quick
		Quizzes from the running text, but retain the chapter
		containing the answers.  It should be possible to move
		each chapter's Quick Quizzes to the end of that chapter,
		but that would require more work and is left as an
		exercise to the reader.

		It is possible to move the quizzes to the ends of the
		chapters, with the answers still at the end of the book,
		or any of a number of other transformations.  "Just a
		small matter of scripting."

		More seriously, one of the advantages of making a book
		available under Creative Commons and GPL is that it
		enables similar transformations and remixes.  That said,
		one of the advantages of the current form of the Quick
		Quizzes is that this promotes faster and better learning.
