I've found that the latest revisions of webcam drivers can break things that were working. For instance, I have a Genius Webcam that worked fine until the GSPCA driver was moved into the kernel source, now it's useless. From my Googling this doesn't appear to be confined solely to the model of camera I have.
I might be able to get it working by retro-fitting the old driver, hacking on the broken new driver, or somesuch but it's no longer simple to get it working.
Do some Googling looking for the (kernel) version of Linux you're using and the webcam you intend to get, to confirm from actual user reports that the camera really works for that revision. Don't rely on what's reported on various hardware compatibility lists because they may well be out of date and things that used to work don't necessarily do so now or, at least, not without a great deal of messing around.
[383687.268638] usb 4-2: new full speed USB device using uhci_hcd and address 28
[383687.439503] usb 4-2: configuration #1 chosen from 1 choice
[383687.442395] gspca: probing 0458:7007
[383689.139441] zc3xx: probe 2wr ov vga 0x0000
[383689.258709] zc3xx: probe 3wr vga 1 0x8000
[383689.263722] zc3xx: probe sensor -> 0014
[383689.263727] zc3xx: Find Sensor CS2102K?. Chip revision 8000
[383689.267821] gspca: probe ok
Bus 004 Device 028: ID 0458:7007 KYE Systems Corp. (Mouse Systems) VideoCAM Web
Guvcview output:
video device: /dev/video0
/dev/video0 - device 1
Init. USB Camera (0458:7007) (location: usb-0000:00:1d.2-2)
{ pixelformat = 'RGB3', description = 'RGB3' }
{ not supported - request format(859981650) support at
http://guvcview.berlios.de }
{ pixelformat = 'BGR3', description = 'BGR3' }
{ not supported - request format(861030210) support at
http://guvcview.berlios.de }
{ pixelformat = 'YU12', description = 'YU12' }
{ discrete: width = 320, height = 240 }
Time interval between frame:
{ discrete: width = 640, height = 480 }
Time interval between frame:
{ pixelformat = 'YV12', description = 'YV12' }
{ discrete: width = 320, height = 240 }
Time interval between frame:
{ discrete: width = 640, height = 480 }
Time interval between frame:
checking format: 842093913
vid:0458
pid:7007
driver:zc3xx
Could not grab image (select timeout): Resource temporarily unavailable
Could not grab image (select timeout): Resource temporarily unavailable
...
The camera is listed as compatible and working with the GSPCA driver, specifically zc3xx. Won't work with Gucview, as can be seen above, or Cheese, or Skype, or Sane or whatever I've tried.
This is true for Ubuntu 9.10, Slackware 12.2, and Slackware 13.0.
The camera does, however, work fine with the SPCA driver (kernel 2.4) on a Slackware 10.2 machine.
Also, although a camera may work with some apps, it may not be consistent and work with all - e.g. Skype might not work even though Cheese will.