1. 介绍

我们知道Linux上的应用程序是ELF格式的,而Windows则是PE格式
所以要解决这个问题首先二进制加载问题;其次,就是API问题,两者的API完全不同要实现兼容,就需要构建一个虚拟层,来实现两者API之间的转换

这里谈到的兼容指的是二进制兼容,即
~ Windows APP on Linux
~ Linux APP on Windows

2. 开源项目

2.1 Windows APP on Linux

1. Wine (Wine Is Not an Emulator)
Wine是一款Linux系统平台下的模拟器软件,其实现原理是將Windows API调用翻译成为动态的POSIX调用

2. Cygwin / MinGW
Cygwin是一个在windows平台上运行的unix模拟环境
Cygwin包括一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集

MinGW(Minimalist GNU for Windows),又称mingw32
是将GCC编译器和GNU Binutils移植到Win32平台下的产物,包括一系列头文件(Win32API)、库和可执行文件

3. Longene
Longene不同于Wine在应用层来实现转换Windows API,它是在内核里实现兼容
其原理是将Linux内核进行修改,以从内核上来实现对Windows API的兼容

更多信息,参考<Longene whitebook>

2.2 Linux APP on Windows

1. coLinux
CoLinux是在Windows上能够运行的linux(正确地说是Linux内核)
是Linux Kernel的一个移植版本,以在windows下一个进程运行,来支持Linux应用程序

基于从coLinux的项目有andLinux

2. atratus
Atratus可以让你在Windows下运行Linux的二进制执行文件
它包含 ELF 二进制加载器、libc 实现和一个系统调用转换器

3. LINE
LINE Is Not an Emulator
LINE executes unmodified Linux applications on Windows by intercepting Linux system calls

2.3 操作系统

ReactOS: 可以说是开源版本的Windows,研究它对于理解Windows的原理是不错的选择
Contiki: 一个小型、开源、极易移植的多任务电脑操作系统,专门设计以适用于一系列的内存受限的网络系统
NuttX: 是一个实时操作系统(RTOS), 强调标准兼容和小型封装, 遵循Posix和ANSI标准, 主要用于工业控制领域
Zephyr: 是由Linux基金会托管的开源协作项目, 目标是构建一个针对资源受限设备的小型、可裁剪的实时操作系统(RTOS)
Mynewt: 是一个社区驱动的模块化操作系统, 用于资源受限嵌入式环境的操作系统应用

参考:
<IoT In five days>
<Comparison of real-time operating systems>

Linux和Windows兼容的更多相关文章

  1. 个人项目-WC(C/C++ 兼容Linux和Windows)

    一.Github地址 https://github.com/S-TRAVELER/WC 实现的功能: 支持 -c 支持 -w 支持 -l 支持 -s 支持 -a 图形界面 多参数(文件名或通配符表达式 ...

  2. 【热文】 为什么很多硅谷工程师偏爱 OS X,而不是 Linux 或 Windows?

    校对:伯乐在线 - 黄利民 链接: 1. Why do most of the developers in Silicon Valley prefer OS X over Linux or Windo ...

  3. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  4. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  5. XAMPP(Linux版-x86兼容)官网下载

    欢迎光临 XAMPP 的 Linux 版 (x86 兼容处理器版)顺便提一下:该软件以前被称作 LAMPP,但为了避免误解,我们将其重名命为 »XAMPP 的 Linux 版«.所以,如果您在寻找 L ...

  6. (翻译)使用Api分析器与Windows兼容包来编写智能的跨平台.NET Core应用

    本文翻译自Scott Hanselman博客: https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithThe ...

  7. 【转载】LINUX 和 WINDOWS 内核的区别

    LINUX 和 WINDOWS 内核的区别 [声明:欢迎转载,转载请注明出自CU ACCESSORY http://linux.chinaunix.net/bbs/thread-1153868-1-1 ...

  8. Linux与Windows远程互访(使用Rdesktop与SSH)

    工作的时候经常使用Redhat系列系统,而平常娱乐文档都是在windows平台上进行.因此实现linux与windows远程互访也是很有必要的事情. 本文将介绍如何实现Linux与Windows的远程 ...

  9. linux系统PKWindows系统,从各方便分析linux和Windows的优劣

    服务器系统linux系统和linux系统哪个好用,公说公有理婆说婆有理,今天鼎峰凡凡大概对Linux系统与Windows系统的优缺点PK!可以从以下几个方面来看 ①成本  赞成Linux的声音Linu ...

随机推荐

  1. docker安装后无法启动问题

    问题报错: Error starting daemon: Error initializing network controller: list bridge addresses failed: no ...

  2. [转载]本地配置的 *.dev,*.app域名 在谷歌浏览器中总是自动转跳到https上,导致不能访问?

    本地开发环境 .dev 不正常,找到文章mark一下 转自:https://segmentfault.com/q/1010000012339191

  3. python实现导出excel表(前端+后端)

    之前在做项目管理系统的时候需要实现将数据导出到excel表的功能,搜索之后发现了python的xlwt模块可以很好的实现这项功能. 首先是导入xlwt模块: import xlwtfrom io im ...

  4. PAT乙级1088

    1088 三人行 (20 分) 子曰:“三人行,必有我师焉.择其善者而从之,其不善者而改之.” 本题给定甲.乙.丙三个人的能力值关系为:甲的能力值确定是 2 位正整数:把甲的能力值的 2 个数字调换位 ...

  5. 安装Mysql community server遇到计算机中丢失msvcr120.dll

    一.下载community server版本 Mysql community server版本:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7 ...

  6. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 19: ordinal not in range(128)

    解决方案: 1: 在网上找到的解决方案是: 在调用import matplotlib.pyplot as plt前 import sys sys.setdefaultencoding(“gbk”) 让 ...

  7. UNIX 系统中 wc 程序的主要部分

    以下代码为 UNIX 系统中 wc 程序的骨干部分 #include <stdio.h> #define IN 1 #define OUT 0 int main(int argc, cha ...

  8. Java EnumSet工作原理初窥

    EnumSet是Java枚举类型的泛型容器,Java既然有了SortedSet.TreeSet.HashSet等容器,为何还要多一个EnumSet<T>呢?答案肯定是EnumSet有一定的 ...

  9. 如何选择Android自动化框架的几点拙见

    首先由于我自己也是个新手,也是在学习各种框架然后给公司项目选定相应自动化框架,研究移动自动化测试框架也就近段时间而已,所以我只能从我自己今天为止的认知角度给各个框架抒发我自己的拙见,你看是否能从中接纳 ...

  10. Leetcode 599.两个列表的最小索引总和

    两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答 ...