diff --git a/source/dub/internal/vibecompat/core/file.d b/source/dub/internal/vibecompat/core/file.d
index 92b79ae..2d8e946 100644
--- a/source/dub/internal/vibecompat/core/file.d
+++ b/source/dub/internal/vibecompat/core/file.d
@@ -145,8 +145,14 @@
 // guess whether 2 files are identical, ignores filename and content
 private bool sameFile(Path a, Path b)
 {
-	static assert(__traits(allMembers, FileInfo)[0] == "name");
-	return getFileInfo(a).tupleof[1 .. $] == getFileInfo(b).tupleof[1 .. $];
+	version (Posix) {
+		auto st_a = std.file.DirEntry(a.toNativeString).statBuf;
+		auto st_b = std.file.DirEntry(b.toNativeString).statBuf;
+		return st_a == st_b;
+	} else {
+		static assert(__traits(allMembers, FileInfo)[0] == "name");
+		return getFileInfo(a).tupleof[1 .. $] == getFileInfo(b).tupleof[1 .. $];
+	}
 }
 
 /**
@@ -157,7 +163,7 @@
 	if (existsFile(to)) {
 		enforce(overwrite, "Destination file already exists.");
 		if (auto fe = collectException!FileException(removeFile(to))) {
-			version (Windows) if (sameFile(from, to)) return;
+			if (sameFile(from, to)) return;
 			throw fe;
 		}
 	}