Transplantation Wizard from Solaris to Linux

xiaoxiao2021-03-06  62

China

search for:

Only - "" ()

DeveloperWorks China website: Linux: All articles

Transplantation Wizard from Solaris to Linux

English original

content:

Why port to Linux? Problem Migration Guide Migration Tools and Outsourcing References About the author to the evaluation of this article

related information:

Shared Objects for the Object Disoriented!

In the Linux area:

Tutorial Tools & Product Codes & Component Articles

Transplant the application to Linux Guide Malcom Zung (Zung@ca.ibm.com), Linux Application Development Tools, IBM Canada Co., Ltd. Brian Thomson (Thomson@ca.ibm.com), Linux Application Development Tools, IBM Canada Co., Ltd. October 2001

IBM member Malcom Zung and Brian Thomson will tell why port applications to linux from Sun Solaris to Linux and give some guidance, suggestions, and reference to provide help. The article also introduces a convenient online tool, you can use this tool.

Detect the API to find out how the API used by your Solaris app is compatible on Linux.

With the gradual popularity of the Linux operating system, many IT studios are considering how to transplant existing applications and development environments to Linux, which is not enough. Whether you are considering another optional deployment platform that is written as a write code, it is not difficult to transplant to Linux (especially in your UNIX application) in Linux. Preparation). Here, we will give pointed to those who are considering using Linux. We know that many people have listened to whether to transplanted to Linux, if you are like this, please jump directly to the question section, we will begin to discuss technical details during the transplantation process. Why port to Linux? There are many convincing reasons to transplant to Linux, which are very attractive. Linux technology and operational feature make it suitable for many applications, and now the 2.4 release can be better illustrated, from a white paper from Linuxcare to evaluate this version, where the new release is described in detail. Technical enhancements (see Refer to the references below). Flexibility Linux source code is available free of charge. Everyone who has thought about it in order to debug other people's proprietary code, if you can really see the work of the code, then the debugging work is much easier. Moreover, if you find a problem in it, or if you want to add a function, you can modify Linux, premise to comply with the GNU General Public License. You don't have to wait until the operating system vendor solves the problem. This is not just theoretical advantage. Users like commercial software vendor SAP have chosen methods for modifying Linux source code, and use this quite value as one of the reasons to support Linux. See how SAP is using Linux in SAP's Linux Technology FAQ (see Resources, there is a link to this point). Even if you feel that you will not use the freedom brought by open source development, you will also benefit from it because Linux can run on a variety of processors and configurations, from the mainframe to PowerPC, SPARC (TM), Alpha, PA- RISC and Intel processors, even to personal digital assistants and embedded systems. Linux also has a complete TCP / IP protocol stack, including IP version 6 with routes and firewall functions. The latest version of Linux supports the HTTP server in the kernel, which enables high-performance, logical volume management, and cluster functions, which makes it possible to handle large computing and search for previously needed to make. Linux also supports many file systems, including recoverable log file systems, Reliable Independent Disks, RAID, as well as many optional compatible with other systems File system. Because Linux's open development model enables people to add features, it supports all of these features. Stability Linux is more anticipated in stability. In a OS evaluation report released by Gartner Group, Linux is "very good", which is the same as RISC UNIX, leading to Windows NT and 2000 (see Resources). Security practices prove that security needs to be built from bottom to the system, which is one of its nature.

Attempting to establish safety in the case of underlying insecure, it is actually equivalent to fantasy malicious users who do not know about the underlying defect - this gambling result will usually fail. Linux security is built from the kernel, because it is necessary to achieve a careful study of thousands of developers, any flaws will be isolated early. Linux network security is its particularly excellent place, and Linux itself has built a wide range of routing and firewall functions. Another Gartner Report (see Referring) Recommend Linux is its mature security feature. Prior to scalability, Linux lags behind commercial UNIX systems in support symmetrical multi-processor (SMP) systems, but with the release of scalability 2.4 kernel, Linux can now stably support four-way SMP. The system has achieved good results on the eight-way SMP configuration of the Web service workload (see the SpecWeb99 Benchmark Report). If you use cluster technology, Linux can handle larger partitioned load tasks. Examples of large Linux clusters include a 1024 node cluster constructed for geographical analysis, and more than 8,000 Linux systems that make up the Google search engine (see Resources). Moderate resource requirements Although Linux can utilize large memory and high speed processors, there is no such condition Linux can also run well. Linux can also run on the Intel 486 processor. In the case of a server, Linux can be configured to automatically start the X server, so that a large number of resources required for the GUI (Graphical User Interface, graphical user interface) system can be saved. Enterprises are usually, and most convincing is the fact, not analysis. You can use Linux to build a central system company to judge Linux's business: (see Resources). Fees Although the "Free Software" advocate reminds us that "freedom" refers to the use of freedom rather than there is no price, but use Linux does not bring great pressure to the budget. You can use low prices to get Linux, replication is not limited by the established licenses, nor does it need to pay for the use fee, and it comes with a server application and development tool, which may be charged in other systems. . In addition, product-rich open source development communities are constantly developing and publishing various Linux packages, you can get them free (or pay a small fee). San Francisco's Bay Area Rapid Transit system uses Linux as its 24-hour train control workstation because of the choice of Linux, and they save approximately 15% to 20% of project budgets. Technology and Support Service Availability With the increasing popularity of Linux, more companies (such as IBM, Linuxcare, RedHat, and SUSE) start providing Linux support services, including education, user grading, and system management support, and development services. Because Linux is very popular among school, many new graduates have used Linux. You can also find people who can skillfully apply Linux in any city, while Web site and Internet newsgroups are still a valuable and effective source of Linux usage guide information and informal technology. Market growth If you are developing software to sell again, you may be interested in knowing the following information - IDC estimates that Linux server sales will increase by more than 28% (see Resources).

The growth rate of the actual deployed system is difficult to estimate, may be higher, because a set of CD or downloaded Linux can be legally installed on many machines. The accessible Linux code of the development system can be developed on the low-end commercial machine, and then migrate to these larger servers when the feature of the larger system begins. Open Source Development Lab provides access to high-end Linux systems for open source projects, which extends Linux to an enterprise or related app. Similarly, IBM Linux Community Development System is a service that allows applicants who meet the requirements to access itself to the Linux system on IBM mainframe (see Resources). The views of other people's new Wenying and the Internet have any other in-depth analysis for those who are considering porting to Linux. Here is a small example: "We use this software in a very short time in very short overhead settings, install and configure a functional UNIX system, which is Linux must be available to the corporate environment." - Gavin Sherry, Linux and The Enterprise. "The correct value orientation should be, you can write applications without always worrying about the structure of the system, or the system architecture. Linux is the characteristics of this open and standard, so you can get from the watch to the supercomputer Run on the machine. "- Speech on Sam Palmisano, LinuxWorld 2001. Problem Once you are identified to Linux attractive - because reduced overhead, available technology, increased supplier choices, or rapidly growing market attractions - you need to understand potential costs and risks, And how you can mitigate these effects. Below is a list, list the questions, and the corresponding answer.

Will migration will need a big pen to invest in funds? When you are thinking about transferring software development from a platform to another platform, you will pre-think of this long-term project will stop all other new jobs, and occupy your overall group of people, and you need a big pen. What is the cost of investment and re-training? Do you want this project to make great value, or all valuable, that is, once started, can only complete it, otherwise give up all over? In consideration of these situations, there are no several project managers will continue to support this project. They will analyze this problem correctly, and only the profits brought by this long-term project can only be seen patiently. Fortunately, from Solaris to Linux does not necessarily have these problems, and it is possible (worthwhile in most cases) to avoid "big hand investment". In the migration guide section of this article, we describe how to migrate in the class, which will be uniformly distributed and reduce the risk, because the intermediate point is constant (you can stay at each point at all points). This means you can submit each step independently and re-evaluate priority and destination after each submission. This is easier to control the risks and impacts caused by your company. How much is overhead? How will it take? This problem can only be answered only if a comprehensive migration assessment is a comprehensive migration assessment. These include the following related factors:

Compiler language code with hardware-related factors (such as word length or byte end attachment) platform runtime service build tool attachment database, networked condition, and messaging middleware user interface portable test case and test environment The size and complexity of transplantation work will be directly proportional to the system and environment. If the application only uses a standard language component and a standard library, it is not necessary to run under Solaris on the SPARC processor, then transplant is relatively easy. For example, Java applications usually belong to this category. On the other hand, if the application is a C program that does not use the POSIX service on Solaris, or depends on a third-party product that is not available on Linux, the transplantation work is much more difficult. Please refer to the migration guide to learn more about the evaluation of migration. Also, the migration tools and outsourcing parts of this article introduce some experts, they can help you evaluate the portability of your application. Can my app continue to run on Solaris? If you don't want to choose between Linux and Solaris, don't choose! When you transplant your app, you are all replacing non-portable methods and accessories to stunning things. You will replace the Solaris Build Tool into a GNU tool and use the POSIX compatible thread library instead of the corresponding library in Solaris. Because these tools and interfaces can be found on Solaris, you can continue to use Solaris freely, even after transplanting the development platform to Linux, continue to grasp the Solaris market. Migration Guide The following straightforward approach will allow your development team to gradually perform transition from Solaris to Linux. You can do the transplantation work with the main development work, thereby minimizing interrupt possible. If it is appropriate, your application will be able to apply well for Linux and Solaris at the end of the migration process. The linux operating system of most languages, build tools, and compilers are available for free, you can download them from the Internet. You only need to provide hardware and developers, you can start transplant. For C and C applications, we recommend to continue running Solaris in step 1, and go to Linux development tools. This approach allows you to gradually conversion more detailed. You can choose to proceed to step 2, continue to run on Sun hardware at this intermediate phase, while slowly familiar with Linux operating system. Finally, step 3 will disengage the application from the Sun hardware. If you are porting a Java application, you can proceed directly to step 3 - a general Java application rarely or does not depend on the underlying machine hardware. If you are a portation of the Fortran application, you can proceed directly to step 3. Step 1: Building a GNU tool (GCC / GMAKE) on Solaris will help you perform this step: SunfreeWare.com's Solaris GNU Tools Make Tool Document

GNU Make Sun Make Compiler Document

GCC Sun C, Sun C GCC (GNU Compiler Collection) tool set includes a C compiler and a C compiler. Because Solaris and Linux have a GNU compiler and make utility, it is easy to use these tools to build applications relatively easy. First, please download the GNU tool with the link above and install them on Solaris. Then, try to build an application with a GNU GMAKE utility (not the Solaris Make utility). Because the GNU Gmake utility is different from the Solaris Make utility, you will touch some error messages generated by the GNU GMake utility based on the components used in your make file. Use the above Make Tool Document link to help you identify the problem area in your Make file and adjust your Make file accordingly. Once you change the make file to use Gmake, change the name of the called C compiler from CC to GCC in the Make file, and change the name of the C compiler from CC to G . Then rebuild the application. The error message you will encounter during the build process (if present) can be divided into two categories: command line options issues and code issues. Please distinguish news that there is a message that is different from the command line options accepted by the GNU and Sun compilers. In addition to a few basic options (such as "-C" and "-g"), the most options accepted by the compiler are different. Red Hat's Solaris-TO-Linux Porting Guide provides a good summary of these differences. Use the above compiler document link to modify your Make file to make up the compiler options. Below you can handle the remaining error messages related to the code and warning information. A simple way to handle these messages is to capture them in a file and check it. Please use the above compiler document link to understand and process different problems between compilers. The migration tools and outsourcing parts of this paper give a list of companies that can help you solve those problems due to different compilers in your application. Note the license and copyright related to these libraries when porting to Linux and connecting an application link to an open source library. Your new ported C / C app will be attached to the GNU C / C runtime library. These libraries are protected by the GNU "Copyleft" license. If you are being transplanted with a proprietary property, and you plan to sell it immediately after building the software with the GNU tool, then you should be more cautiously understand GNU General Public License and GNU Secondary Universal Public License (see Reference) The terms and conditions specified in the information. Once your software is linked to libraries protected by these licenses, some terms and conditions in the GNU license will be used along your software. Step 2: (Optional) Build and Test the resource below on the SPARC's Linux will help you perform this step:

SPARC's SUSE Linux (Press House Distribution) UltraSPARC (TM) platform Linux has a uncommon case, that is, the ported application has a specific access to SPARC hardware, when step 2 becomes transplantation Important intermediate stage. It enables Solaris developers to familiarize yourself with the Linux environment without having to give up the bottom SPARC hardware and non-modifying the SPARC-specific part. Please get the Linux version that can be run on your Sun hardware by one of the links above. Then install the operating system and rebuild the application using the supplied GNU tool. Because you use GCC in step 1 to build an application, the difference in step 2 will be restricted to the disclosure program interface (Application Programming Interface, API) between Solaris and Linux. See the Runtime Interface section to further understand the information about these distins. Adjust your application if needed. Once the application is completely rebuilt, it implements a complete validity test. Step 3: Build and test the resource below for other hardware on Linux, which will help you perform this step:

Red Hat SUSE TurboLinux In the last step of the migration process, first get Linux on the target hardware you selected. You can use Linux servers with IBM Intel-IA32-based product lines (including NetVista, IntelliStation, Netfinity) and new IBM EServer XSeries. IBM PSeries and ZSeries can also use Linux (see Resources). You can purchase a low price to download the Red Hat Linux distribution version for Intel / X86, and it is easy to install and set up on almost any Intel-based PC. SUSE provides Linux distribution versions that support IBM PSeries and ZSeries. Also, you must install the compilers and tools that will be used. Below, copy the original tree and the make file to the new Linux machine and re-build the application. If you do not complete step 2, you may need to modify the application to accommodate the difference between Solaris and Linux runtime API. See the Runtime Interface Part to learn about other information. Finally, if the application contains any SPARC-specific code, please resolve the problems in these partial code as needed. Before the end of the project, the ported application is performed for a whole set of verification tests. The Java app will use Java to transfer from Solaris to Linux very simple from Solaris. Solaris SPARC / X86 and Linux X86 can use Sun's Java 2 Platform Standard Edition. For those FORTE (TM) for Java Community Edition, Idevelopment Environment, IDE is currently being used, and will continue to use this IDE in Linux, and can be downloaded for free. IBM also provides Java 2 Developer Kit for Linux (see Resources), which includes a redesigned Java virtual machine (Java Virtual Machine, JVM), which enhances instant compilation. In addition, IBM double reputable Visualage for Java IDE can also be used in Linux. Its entry version is free, you can download from the VisualAge Developer Domain Web site (see Refigu). A Java Compiler (GCJ) is included in the GCC tool set, which can compile Java source files as class files (bytecode), or directly compile into local machine code. Because regardless of the JVM running on what operating system, it will accept the same bytecode, so you can choose to compile the Java source file on an operating system and then run the compiled class file on another operating system. For example, if Linux is your primary development platform, the Java class file you created on Linux may also work well on Solaris or other platforms that can use the JVM (see Reference). Fortran Application If your Solaris Fortran application is consistent with F77, you can compile applications using the GCC Fortran 77 (G77) compiler (see Resources).

The GNU Compiler Collection set includes a G77 compiler. If your application is currently built with Sun's F90 / F95 compiler, then you will need to purchase a commercial FORTRAN compiler. You can get the Fortran 90/95 Linux Tools by the following resources: Pro Fortran 7.0 (ANSI / ISO Fortran 95) compiler and debugger from Absoft Development Tools, F77, F90, and HPF compilers, debuggers from the Portland Group And analyzers from VERIDIDIAN SYSTEM VAST / F90 Fortran compiler running interface Although most runtime interfaces are common on Linux and Solaris, there are still differences. If your app uses the available interface available on Solaris, the interface is not available on Linux, or it is not the same interface on Linux, then this type of use is modified to be constructed correctly. application. The differences are listed below.

System calls and C library Solaris kernel Provide logical volume support, ACL (Access Control List, Access Control List) management and system audit logging. For this feature, the available Linux API is different from the API on Solaris. There is also streams that is not supported under Linux default conditions. We need to modify the application that uses streams to make changes to use the POSIX socket as an alternative. Also, many Solaris APIs available on Linux have different return and parameter types, or declared in different header files. However, these differences are usually secondary, and it is generally not necessary to make changes to the code in the application. Testing the compatibility on Linux on Linux If you want a report that describes the specific API and Linux used by the Solaris application, use developerWorks from Solaris to Linux porting tools. C library Solaris Forte 6 C Compiler includes three categories libraries: -compat = 4 complex, classic IO streaming, and standard C libraries (which include standard plurals and IO streams). GCC only includes standard C libraries. If the transplanted application uses the -compat = 4 complex library or classic IO library, you need to modify the application to use the standard version of these libraries contained in the standard C library. This modification has other benefits, that is, it is possible to improve the portability of the application. The mathematical library Solaris math library includes a conversion function of the ASCII encoded decimal number. There is no such function in the Linux math library. X Library and Window Manager X11R6 X Server and XLIB, XT, can be used on Linux. Motif can be obtained from the Open Group (see Resources) in the form of Open MotiF, which is also released free of charge on Linux. In Linux, people often use Lesstif (see Resources) instead of Motif, which is actually a cloning version of open source MotiF. Desktop: CDE is the default Solaris desktop for GNOME / KDE. It is not included in the universal Linux release. For users who need CDE and more like this special graphical user interface (GRAPHICAL User Interface, GUI) environment, you can get CDE from Xi Graphics (see Refigu) to get CDE in the form of their dextop products. version. Running DEXTOP on Linux Make Solaris users in a familiar GUI environment, which enables a lot of conversions that transplanted to Linux. DEXTOP requires Accelerated-X Linux X-Server from Xi Graphics. Although xfree86 Linux X-Server can be designed to use DEXTOP, xi Graphics does not provide official support for running DEXTOP on XFree86. Threads / LWP (Light Weight Process, Lightweight Process) Support Solaris to support POSIX threads and Solaris-specific thread models.

If the ported application uses Solaris-specific thread API, you'd better modify your application to use POSIX threads. POSIX threads on Linux, and it is more portable. For people to be ported to Linux / alpha, another option is to use the Threads Library for Linux / Alpha developed with Solaris by Compaq. You can learn more about this open source package in Compaq's Linux AffInity web page (see Resources). Process Management: / Proc File System / Proc Pseudo File System provides a convenient way to access the kernel data structure. On Solaris, / proc contains information about active processes and threads, and provides interfaces that control these processes and threads. Solaris / proc Control Interface is generally used by the debugger to track the program execution. On Linux, / PROC does not provide a process control interface. To control the process to debug on Linux, use the PTRACE () API instead / proc. Other Precaution System Management Overall, managing Linux is almost the same as any other UNIX operating system. There are some differences in some specific commands and tasks, IBM and UNIXGUIDE have released comparison charts, which summarize these differences, including not only the difference between Solaris and Linux, but also between AIX and other versions of UNIX. (See Referring). Experienced Solaris system administrators do not have to spend too much power to fully adapt to Linux. Source Code Management For the developers of SUN FORTE Teamware or SCCS (Source Code Control System, Source Control System) on Solaris, they can try to use the developers of SCCS-style source management system. GNU CSSC (Compatibly Stupid Source Control), open source SCCS cloning version. CVS (Concurrent Versions System, concurrent versioning system, see Resources) is more commonly used in Linux and highly respected source code management systems. Solaris and Red Hat Linux also use the Rational ClearCase software configuration management solution (see Resources). Other third-party tools, utilities and many common, popular third-party tools, utilities, and libraries on library Solaris, which can be used on Linux. Given the increasing popularity of Linux, the number of third-party suppliers support Linux is growing every day (see Resources):

Rational Rose and other Rational products can be used on Solaris and Linux. With GCC, the Rogue Wave SourcePro C library can be used on Forte / Solaris on Solaris and Linux. The Trolltech QT C GUI framework can be used on Solaris and Linux. 64-bit calculation Red Hat and many other publishers provide a 64-bit Linux for Compaq / Dec Alpha. You can learn about this Linux on the AlphaLinux Web site. 64-bit Solaris and 64-bit Linux / alpha use the LP64 data model, which can bring good compatibility. Soon, Intel Itanium (TM) IA-64 processor can also use a 64-bit version of Linux. You can learn more about this Linux in the IA-64 Linux Project Web site. A Linux supporting IBM 64-bit PowerPC architecture is also developed. Note that although the SUSE Linux / Ultrasparc kernel runs in 64-bit mode, SUSE Linux / UltraSparc currently does not support 64-bit user space applications. Endian format Sun SPARC and ULTRASPARC processors store integers in large end (BIG Endian). If you want to transplant the application to a little endian version of Linux (such as Linux / Intel), you must resolve any questions related to the end format in the application, and the application can run correctly. You can also choose to use Linux / PowerPC, Linux / PowerPC, Linux / ZSeries or Linux / SPARC, which are large-end platforms outside Linux / Intel. People who want to learn self-study can find a lot of Linux information on the Internet. There are two different starting points, which is the tutorial and IBM Linux, Unix, and open source courses, including Web-based Linux, UNIX, and open source program. The course directory includes Linux, Linux, PERL, and Open source code on Linux on DB2, ZSERIES, and S / 390. You can also find the Linux Professional Institute certificate and the Red Hat certificate course, as well as the course wizard, you can also find a course consultant, he can help you choose a course based on the technology you need. Migration Tools and Outsourcing Migratec This company specializes in migrating applications between platforms. Migratec's porting tool set includes Migration Workbench, which can identify a specific code section that may be modified during your application. Workbench also includes a complete API mapping from Solaris to Linux, tools can be used to detect the compatibility of the Solaris API and Linux applications called. Parasoft's Auto C / C Coding Standard Execution Tool name is CodeWizard, which now includes a feature called RuleWizard that allows users to create custom coding rules. You can use CodeWizard and RuleWizard to create custom internal tools to assist migration and maintain portability.

For those who wish to outsource the entire migration, they can sign and contract with companies such as IBM Global Services, Migratec and Sector7, let these companies to complete the entire transplant task. IBM Global Services recently established a comprehensive Linux service business, including migration, consultants, planning, education and support. Reference

Please understand the technology enhancement of Linux 2.4 in a piece of information in Linuxcare. GNU General Public License and GNU Lesser General Public License allow anyone to view and improve Linux source code. Please answer how SAP is using Linux in SAP's Linux technology. Linux can run on many systems, from the mainframe to your personal digital assistant and embedded system. Gartner Group's evaluation of Linux in a OS evaluation report is "very good". This Gartner report recommended Linux is that Linux has mature security. Check out how many companies use Linux to build a central system, review Linux's business. The results of Linux's Eight-Road SMP configuration in SpecWeb99 are very good. Large Linux cluster has a 324 node cluster built by Shell and 8,000 nodes of Google search engines. Take a look at how the Bay Area Rapid Transit system uses Linux to save project costs. According to IDC estimates, Linux server sales will increase by more than 28% in 2004. Developers can access high-end Linux systems from the Linux Community Development System of Open Source Development Lab and IBM. Please learn about Linux on IBM xSeries, PSeries and ZSERIES in IBMeserver Developer Gardens. Java tools have Sun's Java 2 Platform Standard and Forte (TM) for Java Community Edition IDE, as well as IBM Developer Kit for Linux and Visualage for Java IDE, etc.. Please download the VisuaLage tools for IBM from the Visualage Developer Garden Web site. The GCC set also includes a Java compiler (GCJ). You can get a Fortran compiler from GCC (G77), Absoft Development Tools, The Portland Group, and Veridian Systems. Open Motif and Lesstif are included in the Linux window kit. Xi Graphics has developed a CDE for Linux. Compaq's Linux AffInity web page describes a Linux thread library compatible with Solaris. Please refer to the system management task comparison of the IBM and the system management task released by UNIXGUIDE. The source code management system has GNU CSSC and CVS. Linux products from Rational have Rational Rose and Rational Clearcase. Linux's third-party runtime library has Rogue Wave SourcePro C libraries and trolltech qt C GUI frameworks. Please find information about 64-bit Linux in Alphalinux and IA-64 Linux Project Web Sites. To learn about Linux Education, browse two different sites, which is the tutorial of the IBM's developerWorks Linux area and IBM's Linux, UNIX, and open source course catalog. You can get migration services from IBM Global Services, Migratec, and Sector7. Parasoft's CodeWizard tool can also be used to assist migration.

Please learn more about IBM in Linux on the DEVELOPERWORKS Linux area and Linuxat IBM Web site. Please browse more Linux references on developerWorks. Browse more open source reference information on developerWorks. About the author MALCOM ZUNG current work is to promote application development on Linux. Other projects involved in Malcom also include IBM Distributed Debugger and IBM C Compiler. Malcom's work location is located in IBM Canada, Markmown, Ontario. You can contact MALCOM via zung@ca.ibm.com. Brian Thomson is responsible for the development of applications on IBM global promotion Linux. Brian used to serve as the chief designer of many projects in IBM application development departments. Brian's work location is located in IBM Canada, Markmown, Ontario. You can contact Brian via thomson@ca.ibm.com.