tar deletes .exe files on extraction (again)

Steve Atkins steve@blighty.com
Sat Sep 24 05:07:00 GMT 2011


On Sep 23, 2011, at 11:46 AM, Andrew DeFaria wrote:

> On 9/23/2011 11:26 AM, Steve Atkins wrote:
>> I'm talking about developers of applications, not cygwin-using end users. The developers could work around it (by not including .exe bootstrap files in cross-platform packages or being careful with naming), but they don't because it's not an issue that would ever occur to them, unlike case-insensitivity.
>> 
>> Many systems are case-insensitive
> Really? Aside from Windows what other systems are case insensitive?

The default HFS+ on OS X is the big one for unixy developers (but there's also OS/2 HPFS, ISO9660, most of the Amiga filesystems, VMS and I think RT-11 :) ). 

>>  - and, more importantly, at least one system that's commonly used by developers is - so most software is developed and packaged with that in mind. Case insensitivity is a well understood issue. Only one system, cygwin, considers foo and foo.exe to be identical.
> And as far as I can tell, only one system Windows, is case insensitive WRT filenames. Coincidence? I don't think so! ;-)

>>  It's a niche environment, and not used by many developers who target a unix-style environment, so most developers packaging software will not be aware of the issue and won't work around it.
> I don't think I've met many developers who target a Unix-style environment who did not know about Cygwin and, if forced to use Windows, use Cygwin. Granted the foo vs. foo.exe thing is a bit obscure, but I'd say that a Unix developer actually naming something .exe is also pretty rare.

For a pure unix developer, sure. For a cross-platform developer maybe less so. 

>> Treating "foo" and "foo.exe" as equivalent is a very non-unixy thing to do
> Neither is naming some thing with a .exe at the end!

Sure it is. I can use any string I like to name a file! :)

(And I have seen it done with some CAD apps in the dim and distant past where the actual executable was /opt/foo/bin/bar.exe which was called from a wrapper script shell /opt/foo/bin/bar. Slightly odd, sure, but not entirely silly.)

>> ("everything is a file, and the name of the file isn't important to the kernel") so it's particularly surprising behaviour on a system that otherwise looks quite like a unix environment.
>> 
>> (I'd assumed that cygwin worked by intercepting execve(), and it hadn't even occurred to me that it would modify filesystem access at a coarser level than that until I started diagnosing apparent bugs in tar).
>> 
>> It's not a serious problem, of course - but it does mean that the most widely used cross-platform GUI library cannot be unpacked on cygwin and built from source without jumping through hoops. Given that the cygwin environment is very attractive to cross-platform developers I'm betting I'm not the first person who has been burned by this, and won't be the last.
> So why don't you ask them to fix it?

Because it's not their bug, and it's something that'll pop up elsewhere too. (Note that I'm not asking anyone working on cygwin to fix it either, just reporting the issue, asking if my understanding of the bug is correct and current, then sticking around for the conversation.)

> I mean what do they need a foo and a  foo.exe for anyway?

configure is a shell script that does what configure always does. configure.exe is a windows binary that does much the same thing for a windows platform.

Cheers,
  Steve


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list