添加Windows对POSIX项目的支持......有多痛苦?值得努力吗?

Art*_*yom 5 winapi porting posix mingw

我正在尝试/考虑使CppCMS - C++ Web Framework项目更加跨平台.

今天我可以轻松支持Linux,OpenSolaris,FreeBSD甚至Cygwin.但是当涉及Native Windows时,它变得非常痛苦:

情况概述:

  1. 我是POSIX/Linux开发人员,我对Visual Studio和Win32 API等Native Windows开发工具几乎不熟悉.但是我为这个平台做了一些工作,所以我理解Windows的局限性和事实是完全不同的世界.
  2. 这是一个使用在Unix世界中流行的API的Web项目,例如:在大多数UNIX Web服务器中实现的CGI,FastCGI和SCGI; 但我知道我无法在IIS中使用它,因为它不支持TCP/IP上的FastCGI(仅限Windows管道).

    因此,即使它可以工作,它也可能仅在Apache的Windows端口上运行.

  3. 我在POSIX API上大量接力:

    • Pref-forking允许在崩溃的情况下保持高生存能力(Windows不支持),因此这个功能将会丢失.
    • 我使用了一些文件锁定功能(但我可以放弃它而不用分叉)
    • 我大量使用本机pthreads,即使我可以用Boost.Thread替换它们
  4. 我可能永远无法支持Visual Studio(可能是2010年支持C++ 0x),因为我继续使用C++ 0x decltype/auto功能或typeof/__ typeof__扩展,这是我工作的大多数编译器所支持的:gcc,英特尔,太阳工作室.(说实话:我可以在没有它们的情况下工作,但它使框架用户的生活更容易.
  5. 我在autotools上大量接力,我无法用CMake,bjam或朋友替换它们,因为当涉及到支持国际化,交叉复制,包管理时,他们只是没有给我一个解决方案.
  6. 有许多令人烦恼的问题,例如在Windows下缺少gmtime_r或localtime_r,以及许多其他需要我重写它们或用第3部分库替换它们的内容.
  7. 仍有许多"类似UNIX"的库移植到Win32,如:iconv,gcrypt和其他一些像libdbi一样几乎没有移植的库,它们对Windows有许多限制.

底线:

有很多非常重要的工作要做,即使它完成了,它可能只适用于MingW工具而不是Windows程序员熟悉的" 本机 "工具.

所以,我的问题是:

  • 这样的MingW港口值得努力吗?这有助于建立更大的社区吗?
  • 有没有人有过将大型项目从POSIX环境移植到Win32 API的痛苦经历?
  • 它对Windows开发人员有用吗?

编辑:

对我来说,了解有多少Windows开发人员更喜欢使用开源开发工具MingW而不是像VS这样的Microsoft开发解决方案,这一点也很重要.

编辑#2:关于"原生"Windows解决方案和IIS的清除.

事实上,用IIS运行框架确实很难.我解释:

  • 该项目与标准 Web服务器API相关,如FastCGISCGI,允许通过sinlge套接字接受许多请求.因此,在应用程序方面,我接受新请求继续它并返回答案.有时几个线程处理多个请求.

    因此,实现一个或两个标准协议我打开与任何现有服务器的通信:Apache,lighttpd,nginx,cherokee ......或任何其他服务器; 除了IIS之外

  • IIS具有FastCGI的实现,但是......它仅支持每个本地进程的1个连接,仅由Web服务器控制...

所以...绝对没有标准的方法将我的应用程序连接到IIS.

请注意,我实现了标准的 Web服务器API,我没有实现既不是IIS专有的ISAPI也不是Apache专有的API,即使是第二个更重要的是针对UNIX世界.

所以,只是Windows IIS Web世界还没有为这样的项目做好合作准备,所以如果有人在Windows下使用它,它会将它用于更开放的Web服务器.

Mar*_*wis 3

您应该根据用户需求做出决定。用户是否曾要求在 Windows 上使用该框架?如果是这样,他们是否解释了为什么他们想要使用 Windows(例如他们有哪些额外的限制、他们想要使用什么网络服务器等)?

通常,Windows 用户确实希望一切按照 Windows 方式运行。这意味着 Visual Studio 支持、IIS 支持、MSI 安装程序等。如果某些东西仍然感觉像 Unix,我宁愿使用 Unix 本身,而不是与半工作的端口作斗争。

  • @Artyom:当没有其他东西可以免费使用时,人们一直在使用 MingW。现在,微软提供了 VS 的免费(就像啤酒一样)副本,它提供了您需要的大部分功能,因此人们不再使用 MingW,特别是因为 MingW 也有局限性。 (2认同)