views:

1425

answers:

10

What exactly does the word patch mean when refering to 'submitting a patch'?

I've seen this used a lot, especially in the open source world. What what does it mean and what exactly is involved in submitting a patch?

+15  A: 

It's a file with a list of differences between the code files that have changed. It's usually in the format generated by doing a diff -u on the two files. Most version control systems allow the easy creation of patches but it's generally in that same format.

This allows the code change to be easily applied to someone else's copy of the source code using the patch command.

For example:

Let's say I have the following code:

<?php
  $foo = 0;
?>

and I change it to this:

<?php
  $bar = 0;
?>

The patch file might look like this:

Index: test.php
===================================================================
--- test.php    (revision 40)
+++ test.php    (working copy)
@@ -3,7 +3,7 @@
         <?php
-            $foo = 0;
+            $bar= 0;
         ?>
Mark Biek
I know posted this a long time ago, but it just appeared at the top of the first page, and it's an awesome answer. Thanks to you, my knowledge bank has increased just a little bit more.
fortheworld
Glad you found it useful :)
Mark Biek
+1  A: 

A patch is a file containing all of the necessary information to turn the maintainer's source tree in to your own. It's usually created by tools like diff or svn diff or git format-patch.

Traditionally, open-source projects accept submissions from normal schlubs in the form of patches so they don't have to give others commit access to their repositories.

Jim Puls
+1  A: 

A patch, ususally in the form of a .patch file, is a common flat file format for transmitting the differences between two sets of code files. So if you are working on an open source project, and make code changes to files, and want to submit that to the project owner to be checked in (usually because you don't have checkin rights), you would do so via a patch.

WinMerge has this functionality built in, as do many other tools like TortoiseSVN.

Nick
A: 

I've always believed the term meant a bug fix, like a knee patch Mom used to put on your holey jeans.

Scottie T
+1  A: 

A patch file represents the difference between existing source and source you've modified. It is the primary means of adding features or fixing bugs in many projects.

You create a patch using the diff command (for example).

You can then submit this patch to the development mailing list and if it received well, then a committer will apply the patch (thus automatically applying your changes) and commit the code.

Patches are applied using the patch command.

cynicalman
+1  A: 

Generally it implies submitting a unified diff file with the aggregate changeset for a feature. You can read more about patches on Wikipedia. Several version control systems (svn, git, etc.) will create a patch file for you based on a changeset.

Travis Illig
+1  A: 
 1. n. A temporary addition to a piece of code, usually as a quick-and-dirty

remedy to an existing bug or misfeature. A patch may or may not work, and may or may not eventually be incorporated permanently into the program. Distinguished from a diff or mod by the fact that a patch is generated by more primitive means than the rest of the program; the classical examples are instructions modified by using the front panel switches, and changes made directly to the binary executable of a program originally written in an HLL. Compare one-line fix.

See the entire definition in the jargon file here

Kluge
I don't think that's the usage that the questioner was referring to.
Blorgbeard
+3  A: 

Richard Jones, a developer at Red Hat, has a nice little primer on submitting code to open source projects which covers making and submitting patches.

Chris Conway
+4  A: 

A patch is usually a file that contains information how to change something (very often to fix a bug, but could also be an enhancement). There are different kind of patches.

A source code patch contains information how one or multiple source code files need to be modified. You can easily generate them using the diff command and you can apply them using the patch command (on Linux/UNIX systems these commands are standard).

However, there are also binary patches. A binary patch contains information how certain bytes within a binary need to be changed. Binary patches are, of course, rare in the OpenSource world, but in the early days of computers I saw them a lot to modify shipped binaries (usually to work around a bug).

Submitting a patch means you have locally fixed something and now you send the file to someone, so he can apply this patch to his local copy or to a public copy on the web, thus other users can benefit of the fix.

Patches are also often used if you have some source code that almost compiles on a certain platform, but some tiny changes are necessary to really have it compile there. Of course you could take the source, modify it and offer the modified code for download. But what if the original source changes again (e.g. bugs get fixed or small enhancements were added)? Then you had to re-download the source, apply the changes again and offer the new modified version. It's a lot of work to keep your modified source up-to-date. Instead of modifying, you create a diff between the original and your modified copy and store it on your server. If now a user wants to download and compile the app from source, he can first download the latest & greatest version of the original source, then apply your patch (so it will compile) and always has the latest version, without you having to change the patch. A problem will only arise if the original source has been changed exactly in one of the places your patch modifies. In this case the system will refuse to apply the patch and a new patch needs to be made.

Mecki
+1  A: 

Patch is also used in the act of updating system binaries. Microsoft sends out patches all the time but they aren't source code. They are .msp files that install improved binaries. As with all computer science terms, patch is overloaded.

brock hamper